web-dev-qa-db-ja.com

2つの辞書から値を追加します

dict1 = {a: 5, b: 7}
dict2 = {a: 3, c: 1}

result {a:8, b:7, c:1}

どうすれば結果を得ることができますか?

7
Peter

これはまさにそれを行うワンライナーです:

_dict1 = {'a': 5, 'b': 7}
dict2 = {'a': 3, 'c': 1}

result = {key: dict1.get(key, 0) + dict2.get(key, 0)
          for key in set(dict1) | set(dict2)}
# {'c': 1, 'b': 7, 'a': 8}
_

set(dict1) | set(dict2)は両方の辞書のキーのセットであることに注意してください。 dict1.get(key, 0)は、キーが存在する場合は_dict1[key]_を返し、存在しない場合は_0_を返します。

12

collections.Counter これは加算を実装します+そのように:

>>> from collections import Counter
>>> dict1 = Counter({'a': 5, 'b': 7})
>>> dict2 = Counter({'a': 3, 'c': 1})
>>> dict1 + dict2
Counter({'a': 8, 'b': 7, 'c': 1})

結果をdictとして本当に必要な場合は、後でキャストして戻すことができます。

>>> dict(dict1 + dict2)
{'a': 8, 'b': 7, 'c': 1}
8
MSeifert

これがあなたにとって素晴らしい機能です:

def merge_dictionaries(dict1, dict2):
    merged_dictionary = {}

    for key in dict1:
        if key in dict2:
            new_value = dict1[key] + dict2[key]
        else:
            new_value = dict1[key]

        merged_dictionary[key] = new_value

    for key in dict2:
        if key not in merged_dictionary:
            merged_dictionary[key] = dict2[key]

    return merged_dictionary

書くことによって:

dict1 = {'a': 5, 'b': 7}
dict2 = {'a': 3, 'c': 1}
result = merge_dictionaries(dict1, dict2)

結果は次のようになります。

{'a': 8, 'b': 7, 'c': 1}
0
OuuGiii
Here is another approach but it is quite lengthy!

d1 = {'a': 5, 'b': 7}
d2 = {'a': 3, 'c': 1}

d={}
for i,j in d1.items():
    for k,l in d2.items():
        if i==k:
            c={i:j+l}
            d.update(c)
for i,j in d1.items():
    if i not in d:
        d.update({i:j})
for m,n in d2.items():
    if m not in d:
        d.update({m:n})
0
Loki

+演算子を受け入れるすべてのクラスで機能するはずの簡単な辞書理解。パフォーマンスが最適でない可能性があります。

{
    **dict1,
    **{ k:(dict1[k]+v if k in dict1 else v)
        for k,v in dict2.items() }
}
0
rovyko