首页 > 解决方案 > 根据 Python 中的条件返回字典中最大值的键

问题描述

我有以下字典:

d = {'a': {'0': 'London', '1': 'Athens', '2': 'Paris', '3': 'London'},
 'b': {'0': 1, '1': 2, '2': 3, '3': 2}}

d['a']和中的键d['b']是相同的。

我想返回 sub-dictionary 中具有最高值的键,它在 sub-dictionaryd['b']中具有特定值d['a']

例如,如果我设置为 input 'London',它应该返回'3',因为'London'在 keys'0''3'中,并且字典中这些键的最高值'b'在 key 下'3'

我该怎么做呢?

标签: pythonpython-3.xdictionarymax

解决方案


你有几个选择。假设您不想使用更合适的结构,您可以从查找匹配的键开始London

d = {
     'a': {'0': 'London', '1': 'Athens', '2': 'Paris', '3': 'London'},
     'b': {'0': 1, '1': 2, '2': 3, '3': 2}
}
a = d['a']
b = d['b']

keys = [k for k in a if a[k] == 'London']

然后,您可以运行max结果:

max(keys, key=lambda k: b[k])

作为一个单行:

max((k for k in a if a[k] == 'London'), key=lambda k: b[k])

这种方法的问题是您正在按值查找字典,这在很大程度上违背了拥有字典的建议。如果您可以自由修改您的字典a,请将其反转:

from collections import defaultdict
a_better = defaultdict(list)
for v, k in a.items():
    a_better[k].append(v)

现在查找更加简单:

max(a_better['London'], key=lambda k: b[k])

推荐阅读