我有一个带有值的python字典,我需要搜索最大键。
data={'A': 1,'C': 3, 'H': 1,'I': 1, 'B': 1,'J': 2,'S': 1, 'D': 3, 'N': 2}
我尝试max(data, key=data.get)
。这会给C
一个答案。但我想得到C
& D
作为答案,因为C和D都是最高的数字。
如何在Python中完成此操作?
答案 0 :(得分:4)
单独使用max
无法执行此操作,因为max
只会返回单个元素。相反,首先,从max
获取data
值,然后过滤那些具有相同值的键。
>>> data={'A': 1, 'T': 1, 'C': 3, 'H': 1, 'I': 1, 'B': 1, 'O': 1,'J': 2, 'Q': 1, 'S': 1, 'D': 3, 'N': 2}
>>> max_val = max(data.values())
>>> [key for key, val in data.items() if val == max_val]
['C', 'D']
答案 1 :(得分:0)
这样的东西?
max_keys = [ k for k, val in data.items() if val == max(data.values()) ]
答案 2 :(得分:0)
创建反向地图。
from collections import defaultdict
reverse_data_map = defaultdict(list)
for k, v in data.items():
reverse_data_map[v].append(k) # it becomes a list of keys that share a value
然后获得最高价值,然后用它来获取钥匙。
max_keys = reverse_data_map[max(reverse_data_map.keys())]
print max_keys # ['C', 'D']
作为一个强大的功能:
from collections import defaultdict
def get_all_max_keys(d):
reverse_map = defaultdict(list)
max_v = 0
for k, v in d.items():
max_v = max(max_v, v) # more efficient method than finding the max afterwards
reverse_map[v].append(k)
return reverse_map[max_v]
调用该函数:
data={
'A': 1, 'T': 1, 'C': 3, 'H': 1,
'I': 1, 'B': 1, 'O': 1, 'J': 2,
'Q': 1, 'S': 1, 'D': 3, 'N': 2,
}
print get_all_max_keys(data) # ['C', 'D']