ネストされた辞書を次のように比較したいと思います。
d = {'siteA': {'00000000': 3, '11111111': 4, '22222222': 5},
'siteB': {'00000000': 1, '11111111': 2, '22222222': 5}}
e = {'siteA': {'00000000': 5}}
f = {'siteB': {'33333333': 10}}
g = {'siteC': {'00000000': 8}}
d
比較するのに使用されます合計フル辞書であるe
、f
とg
。
siteA-00000000でe
見つかった場合は、両方の値(この場合は3と5)を合計して8にします。
f
見つからない場合(この場合はtrue)、辞書をに追加したいと思いますd['siteB']
。
g
見つからない場合は、に追加しd
ます。
ありがとう!
collections.Counter
辞書の値を合計し、それらが存在しない場所にキーを追加するのに役立ちます。以来Counter
のサブクラスでdict
、これは他の操作を壊すべきではありません。1回限りの変換コストは別として、それは効率的であり、そのようなタスクのために特別に設計されています。
from collections import Counter
# convert d to dictionary of Counter objects
d = {k: Counter(v) for k, v in d.items()}
# add items from e
for k, v in e.items():
if k in d:
d[k] += Counter(e[k])
# add item from f if not found
for k, v in f.items():
if k not in d:
d[k] += Counter(f[k])
# add item from g if not found
for k, v in g.items():
if k not in d:
d[k] = Counter(v)
結果:
print(d)
{'siteA': Counter({'00000000': 8, '11111111': 4, '22222222': 5}),
'siteB': Counter({'00000000': 1, '11111111': 2, '22222222': 5}),
'siteC': Counter({'00000000': 8})}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加