【问题标题】:Python - Compare elements of keys in a dictionary and return one of the keysPython - 比较字典中键的元素并返回其中一个键
【发布时间】:2017-08-31 21:25:34
【问题描述】:

我正在尝试比较字典中键中的元素。我想首先比较键的所有第一个元素,然后如果有多个具有最高值的元素,则比较这些键中的第二个元素。

例如:

>>> my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 77]}

1) 在第一个元素中搜索最高值。结果应该是:

('111', '122')

2) 在“111”和“112”的第二个元素中搜索最小值。结果应该是:

('111')

我找到this 讨论以找到具有最大值的键。返回具有相同最大值的多个键的一种解决方案是:

>>> stats = {'a':1000, 'b':3000, 'c': 100, 'd':3000}
>>> [key for key,val in stats.iteritems() if val == max(stats.values())]
['b', 'd']

这里的问题是这些键只有一个元素。我需要弄清楚如何为具有多个元素的键执行此操作。

我想我可以像这样返回每个键的第一个元素:

>>> [item[0] for item in my_dict.values()]
['50', '50', '40', '20']

但是我该如何比较它们呢?提前感谢您的帮助!

【问题讨论】:

  • 如果您不关心键,my_dict.values() 会给您一个列表列表(值)。然后您可以比较列表。
  • 您可以使用 for 循环、cmp()sum() 等函数或 numpy 等外部库来做到这一点。

标签: python dictionary key max min


【解决方案1】:

使用您的 dict 示例,我认为以下内容适合您的定义

>>> stats = {'a':[1,2,3], 'b':[2,8,9], 'c': [3,4,5], 'd':[5,6,8]}
>>> [key for key,val in stats.items() if sum(val) == max([sum(i) for i in stats.values()])]
['b', 'd']

然后做你的比较或任何事情。 但是,我不建议使用 dict 进行此类比较,因为 dict 本质上是无序的。如果可能的话,我会推荐使用或 sorted(list, key) 方法来生成一个有序列表进行比较。

【讨论】:

  • 获取元素的总和,然后找到总和的最大值。我需要找到最大的第一个元素,然后如果有多个找到具有最小第二个元素的键。我会考虑用一个列表来做这件事。我喜欢拥有一个密钥,因为它是每个条目的唯一标识符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多