2017-12-18 152 views
3

比方说,我有一本字典:如何获取字典中的多个最大键值?

data = {'a':1, 'b':2, 'c': 3, 'd': 3} 

我想在字典中的最大值(一个或多个)。到目前为止,我一直在做:

max(zip(data.values(), data.keys()))[1] 

但我知道我可能会错过另一个最大值。什么是最有效的方法来解决这个问题?

回答

4

您也可以尝试这样的事:

from collections import defaultdict 

data = {'a':1, 'b':2, 'c': 3, 'd': 3} 

d = defaultdict(list) 
for key, value in data.items(): 
    d[value].append(key) 

print(max(d.values())) 

,输出:

['c', 'd'] 
3

根据您的示例,您似乎在寻找映射到最大值的关键字。你可以使用列表理解:如果你有一个大字典

[k for k, v in data.items() if v == max(data.values())] 
# ['c', 'd'] 

,打破这一成两行,以避免计算最大的尽可能多的项目,你有:

mx = max(data.values()) 
[k for k, v in data.items() if v == mx] 

在Python 2。 x您需要.iteritems()

+0

我不认为你需要'.iteritems()'。 (我在Python 2.7) – user405892

+0

@ user405892我想这可能不需要,但可能会更有效率的内存? https://stackoverflow.com/questions/10458437/what-is-the-difference-between-dict-items-and-dict-iteritems –

+0

啊,不知道。是的,那么使用它可能会更好。 – user405892

0

首先,找出字典中出现的最大值。如果你想创建所有的最大值(一个或多个)的列表,然后再尝试这样的事:

data = {'a':1, 'b':2, 'c': 3, 'd': 3} 
    max_value = data.get(max(data)) 
    list_num_max_value = [] 
    for letter in data: 
     if data.get(letter) == max_value: 
     list_num_max_value.append(max_value) 
    print (list_num_max_value) 

请让我知道这是不是你正在尝试做的,我会引导你通过正确的过程。