0

私は多くの口述を持っています、私はこの例のために2を与えています:

dict1={'green': 3, 'yellow': 5, 'blue': 1}
dict2={'green': 5, 'yellow': 1, 'blue': 3, 'purple': 10}

既存のキーの値(合計)を更新し、存在しないキーのキーと値を合計できるように、2つのdictを追加する方法を見つけようとしています。

結果:

results = {'green': 8, 'yellow': 6, 'blue': 4, 'purple': 10}

試しdict1.update(dict2)ましたが、ご存知のように、更新された値の辞書しかありません。合計されていません。

これを達成する方法はありますか?

アップデート:

解決済み:実際にはcollections.Counterがトリックを実行しました...ありがとう

4

2 に答える 2

0
{x: dict1.get(x,0) + dict2.get(x,0) for x in set(dict1.keys() + dict2.keys())}

出力:

{'blue': 4, 'purple': 10, 'green': 8, 'yellow': 6}
于 2013-02-19T17:52:55.587 に答える
0

ええと、それは驚くほど難しいです...

dicts = [dict1, dict2]
dict([(key, sum(map(lambda x: x.get(key) or 0, dicts))) for key in set(reduce(lambda a,b: a + b, map(lambda x: x.keys(), dicts), []))])

[{'青':1、'緑':3、'黄':5}、{'青':3、'紫':10、'緑':5、'黄':1}]

またはもっと読みやすい

dicts = [dict1, dict2]
keys = reduce(lambda a,b: a + b, map(lambda x: x.keys(), dicts), [])
dict([(key, sum(map(lambda x: x.get(key) or 0, dicts))) for key in set(keys)])
于 2013-02-19T17:56:49.123 に答える