从python字典中获取最高密钥

时间:2017-03-07 12:09:45

标签: python dictionary

我有一个带有值的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中完成此操作?

3 个答案:

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