【问题标题】:select dictionary item with min value in array of dictionary elements in python 2.7在python 2.7中的字典元素数组中选择具有最小值的字典项
【发布时间】:2014-06-04 16:39:27
【问题描述】:

我有一个这样的字典元素数组:

d = [{'k': 'k1', 'v':4}, {'k': 'k2', 'v':5}, {'k': 'k3', 'v':2}]

我想从具有最低 'v' 的字典元素中检索 'k' 的值,可能有多个具有相同的最低值。在上面的例子中,我想得到:

['k3']

这就是我到目前为止所拥有的,这是解决问题的最有效和最pythonic的方法吗(除了将两行合并为一条)?

m = min([x['v'] for x in d])                               
r = [x['k'] for x in d if x['v'] == m]    

谢谢。

【问题讨论】:

  • k3 不是您的密钥之一。
  • 对不起,我不清楚 - 我编辑得更准确

标签: python list dictionary min


【解决方案1】:

删除不必要的列表推导并改用生成器表达式。

m = min(x['v'] for x in d)                               
r = [x['k'] for x in d if x['v'] == m]   

但是您保留键值对列表而不是dict 是否有原因? (要拥有多张地图?)

d = {'k1':4, 'k2':5, 'k3':2}
m = min(d.itervalues())                        
r = [k for k, v in d.iteritems() if v == m]   

【讨论】:

  • 字典列表是我在系统的另一部分中使用的,我想从具有最低'v'的字典元素中检索'k'值,可能有多个具有相同的最低值。
  • @IUnknown,如果可能的话,如果d 只是一个键和值的列表,我建议更改系统的那部分(如果可能)以使用dict
【解决方案2】:
r = min(d, key=lambda x: x["v"])["k"]

这应该给你'k3'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2015-12-04
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多