6

我正在使用与此类似的数据集:

animals = {
            "antelope": {
                "latin": "Hippotragus equinus", 
                "cool_factor": 1, 
                "popularity": 6
            }, 
            "ostrich": {
                "latin": "Struthio camelus", 
                "cool_factor": 3, 
                "popularity": 3
            }, 
            "echidna": {
                "latin": "Tachyglossus aculeatus", 
                "cool_factor": 5, 
                "popularity": 1
            }
          }

我要做的是找到以受欢迎程度衡量的“最不酷”和“最酷”的动物,例如:

> min_cool_weighted(animals)
  "echidna"

> max_cool_weighted(animals)
  "ostrich"

我首先想到的解决方案是创建 3 个数组(keyscool_factorspopularities),遍历字典,将所有值推送到 3 个数组中,然后使用每个值创建第四个数组 where weighted[i] = cool_factor[i] * popularity[i],然后取最小值/最大值并抓取键数组中的对应键。但是,这似乎不是很 Pythonic。

有没有更好、更有表现力的方式?

4

2 回答 2

6

最大值最小值应该足够了

min(animals, key=lambda x: animals[x]["cool_factor"]*animals[x]["popularity"])
'echidna'
max(animals, key=lambda x: animals[x]["cool_factor"]*animals[x]["popularity"])
'ostrich'
于 2013-11-08T01:15:21.213 回答
2

您可以使用sorted

分钟:

sorted(animals.iteritems(), 
       key=lambda x:x[1]['cool_factor']*x[1]['popularity'])[0][0]

最大限度:

sorted(animals.iteritems(), 
       key=lambda x:x[1]['cool_factor']*x[1]['popularity'])[-1][0]
于 2013-11-08T01:15:50.443 回答