python - 根据 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'
。
我该怎么做呢?
解决方案
你有几个选择。假设您不想使用更合适的结构,您可以从查找匹配的键开始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])
推荐阅读
- android - 使用 ScrollView 的 Flex 布局
- html - data-src 无法加载图像
- reactjs - 可以是 3 种集合类型的道具
- gemfire - Pivotal GemFire 无法看到 Gfsh 或 Pulse 中的缓存数据
- azure - 管理 Azure 网站配置
- javascript - 从 wix 访问 3rd 方 API
- javascript - 在反应组件状态下呈现数据的问题
- angular - Angular:我可以将翻译与异步管道一起使用吗?
- javascript - 如何使用javascript读取本地文件?
- kotlin - 相当于 Kotlin 中 C# 的 Semaphore/SemaphoreSlim?