<p>您可能需要的是<code>reduce</code>来自<code>functools</code></p>
<p>以下是您可能要寻找的解决方案:</p>
<pre><code>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)
</code></pre>
<p>基本上,这个<code>reduce(operator.getitem, [k,'subkey1'], d)</code>所做的就是从子字典中获取值。例如:</p>
^{pr2}$
<p>输出:</p>
<pre><code>True
</code></pre>
<p>这里reduce遍历John>;Male,得到的结果是<code>True</code></p>
<p>我们也可以列出清单作为论据。看看这个</p>
<pre><code>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))
</code></pre>
<p>输出:</p>
<pre><code>True
23
</code></pre>
<p>你不能总是期望这句名言是一句名言,它可以是一句名言,一句名言,一句名言。(谁知道?事情总会发生!)在</p>
<pre><code>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))
</code></pre>
<p>输出:</p>
<pre><code>23
TamilNadu
</code></pre>
<p>现在回到你的问题上来:</p>
<pre><code>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)
</code></pre>
<p>对于每个键<code>k</code>,这将是您的<code>key1,key2,...</code>等等。首先,<code>reduce(operator.getitem, [k,'subkey1'], d)</code>检查其中包含的值是<code>True</code>还是{<cd9>}。仅在<code>True</code>时继续</p>
<p>然后将maxsum设置为dict的sub-dict中的第二项。对于每个键,它都会被检查,如果发现另一个值大于当前值,则该值将被更改,否则它将继续。直到找到可以打印出来的最大值。在</p>