2017-04-06 64 views
-1

我试图比较字典中键中的元素。我想首先比较键的所有第一个元素,然后如果有多个具有最高值的元素,则比较这些键中的第二个元素。Python - 比较字典中的键元素并返回其中一个键

例如:

>>> 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'] 

但后来如何比较呢?在此先感谢您的帮助!

+0

如果你不关心按键,'my_dict.values()'会给你一个列表(值)的列表。然后你可以比较列表。 –

+0

你可以用for循环,或像'cmp()','sum()'等等函数或像numpy这样的外部库来实现。 –

回答

1

使用你的字典例如,看来我下面会适合你的定义

>>> 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'] 

,然后做你的比较或任何责任。 但是,我不会推荐使用字典进行这些比较,因为字典本身是无序的。如果可能的话,我会推荐使用或排序(列表,键)方法来生成一个有序列表进行比较。

+0

获取元素的总和,然后找到总和的最大值。我需要找到最大的第一个元素,然后如果有多个元素找到最小的第二个元素的键。我会研究一下列表。我喜欢有一把钥匙,因为它是每个条目的唯一标识符。 – Ebad