はここ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
として我々はまた、引数としてリストを与えることができ、結果を取得します。ここ
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の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)
をごkey1,key2,...
というようになり、すべてのキーk
について。最初にreduce(operator.getitem, [k,'subkey1'], d)
に含まれる値がTrue
またはFalse
であるかどうかを確認します。それがある場合のみ進めるTrue
次に、maxsumがdictのsub_dictの2番目の項目に設定されます。すべてのキーについてチェックされ、現在のキーよりも大きな値が見つかった場合は値が変更されます。あなたがあなたがプリントアウトできる最大値を見つけるまで。
'd 'のキーと' subkey2'の値の両方を含むリストに、新しい辞書マッピングサブキーに物事をグループ化してフルスキャンする必要があります。これは効率的ではないでしょう。どのようにこの構造で終わったのですか? –
dictをsubkey1がtrueのdictsのリストに変換してから、key関数でmax関数を使用してください –