首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字典中寻找加权最小和最大键的Pythonic方法

从字典中寻找加权最小和最大键的Pythonic方法
EN

Stack Overflow用户
提问于 2013-11-08 01:10:59
回答 2查看 85关注 0票数 6

我正在处理一个与此类似的数据集:

代码语言:javascript
复制
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
            }
          }

我想做的是找到“最不酷”和“最酷”的动物加权受欢迎,这样:

代码语言:javascript
复制
> min_cool_weighted(animals)
  "echidna"

> max_cool_weighted(animals)
  "ostrich"

我首先想到的解决方案是创建3个数组(keyscool_factorspopularities),遍历字典,将所有值推入3个数组中,然后创建第四个数组,其中包含weighted[i] = cool_factor[i] * popularity[i]的每个值,然后取min/max并从键数组中获取相应的键。然而,这看上去不太像毕达通。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 01:15:21

maxmin应该足够了

代码语言:javascript
复制
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'
票数 6
EN

Stack Overflow用户

发布于 2013-11-08 01:15:50

您可以使用sorted

最小:

代码语言:javascript
复制
sorted(animals.iteritems(), 
       key=lambda x:x[1]['cool_factor']*x[1]['popularity'])[0][0]

最大值:

代码语言:javascript
复制
sorted(animals.iteritems(), 
       key=lambda x:x[1]['cool_factor']*x[1]['popularity'])[-1][0]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19849853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档