您可能需要的是来自functools 的reduce
这是您可能正在寻找的解决方案:
from functools import reduce
import operator
d = {'key1' : {'subkey1' : True, 'subkey2' : 4},
'key2' : {'subkey1' : True, 'subkey2' : 8},
'key3' : {'subkey1' : False, 'subkey2' : 1},
'key4' : {'subkey1' : False, 'subkey2' : 9} }
maxsum=0
for k in d:
if reduce(operator.getitem, [k,'subkey1'], d):
value = (reduce(operator.getitem, [k,'subkey2'], d))
if maxsum<value:
maxsum=value
print(maxsum)
基本上这个reduce(operator.getitem, [k,'subkey1'], d) 的作用是从子字典中获取值。例如:
d = {'John' : {'Male' : True, 'age' : 41}}
reduce(operator.getitem, ['John','Male'], d)
输出:
True
这里reduce遍历John-->Male,得到结果为True
我们也可以将列表作为参数。看看这个,
from functools import reduce
import operator
d = {'John' : {'Male' : True, 'age' : 41},
'Vishnu':{'Male':True ,'age':23}}
chklist1 = ['John','Male']
chklist2 = ['Vishnu','age']
print(reduce(operator.getitem, chklist1, d))
print(reduce(operator.getitem, chklist2, d))
输出:
True
23
你不能总是期望 dict 是 dict 的 dict。可以说一个字典的一个字典的字典。 (谁知道呢?事情发生了!)
from functools import reduce
import operator
d = {
"John":{
"Age": 23,
"Sex": 'M',
"Country": 'USA'
},
"Vishnu":{
"Age": 1,
"Country": {
"India": 'TamilNadu',
"USA": None,
"South Africa": None
}
}
}
chklist1 = ['John','Age']
chklist2 = ['Vishnu','Country','India']
print(reduce(operator.getitem, chklist1, d))
print(reduce(operator.getitem, chklist2, d))
输出:
23
TamilNadu
所以现在回到你的问题:
for k in d:
if reduce(operator.getitem, [k,'subkey1'], d):
value = (reduce(operator.getitem, [k,'subkey2'], d))
if maxsum<value:
maxsum=value
print(maxsum)
对于每个键 k 这将是您的 key1,key2,... 等等。首先reduce(operator.getitem, [k,'subkey1'], d) 检查其中包含的值是True 还是False。仅当它是 True 时才进行
然后将maxsum设置为dict的sub_dict中的第二项。对于每个键,都会检查它,如果发现另一个大于当前值的值,则更改该值,否则继续。直到找到可以打印的最大值。