gpt4 book ai didi

python - 在嵌套字典中查找最大值并返回键

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:46 24 4
gpt4 key购买 nike

所以我有这段代码

dictionary = {
'key1': {'a': 1, 'b': 2, 'c': 10},
'key2': {'d': 1, 'e': 1, 'c': 11},
'key3': {'d': 2, 'b': 1, 'g': 12}}

list1 = (a,b,c)

我想做的是运行一个循环,查找列表中所有项目的最大值并返回键。因此,例如,“c”的最大值将返回“key2”,“b”的最大值将返回“key1”等。

目前为止

for value in list1:
m = max(dictionary, key=lambda v: dictionary[v][value])
print(m + "\n")

但这只有在字典中的所有键中都存在相同的子键时才有效。有什么想法吗?

最佳答案

当 key 丢失时使用float('-inf'):

m = max(dictionary, key=lambda v: dictionary[v].get(value, float('-inf')))

负无穷大保证小于字典中的任何现有值,确保忽略缺少特定键的嵌套字典。

演示:

>>> dictionary = {
... 'key1': {'a': 1, 'b': 2, 'c': 10},
... 'key2': {'d': 1, 'e': 1, 'c': 11},
... 'key3': {'d': 2, 'b': 1, 'g': 12}}
>>> list1 = ('a', 'b', 'c')
>>> for value in list1:
... print(value, max(dictionary, key=lambda v: dictionary[v].get(value, float('-inf'))))
...
a key1
b key1
c key2

但是,如果您只遍历所有字典值一次,效率会更高:

maximi = dict.fromkeys(list1, (None, float('-inf')))

for key, nested in dictionary.items():
for k in nested.keys() & maximi: # intersection of keys
if maximi[k][0] is None or dictionary[maximi[k][0]][k] < nested[k]:
maximi[k] = (key, nested[k])

for value in list1:
print(value, maximi[value][0])

假设您使用的是 Python 3;在 Python 2 中,将 .items() 替换为 .iteritems() 并将 .keys() 替换为 .viewkeys().

演示:

>>> maximi = dict.fromkeys(list1, (None, float('-inf')))
>>> for key, nested in dictionary.items():
... for k in nested.keys() & maximi: # intersection of keys
... if maximi[k][0] is None or dictionary[maximi[k][0]][k] < nested[k]:
... maximi[k] = (key, nested[k])
...
>>> maximi
{'a': ('key1', 1), 'b': ('key1', 2), 'c': ('key2', 11)}
>>> for value in list1:
... print(value, maximi[value][0])
...
a key1
b key1
c key2

关于python - 在嵌套字典中查找最大值并返回键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22890826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com