Pythonの2つの辞書のキーの同値の加算のいくつかの方法
2855 ワード
2つの辞書A={'a':1,'b':2,'c':3},B={'b':4,'c':6,'d':8}を結合するには,キー値が同則的に加算される.
2つの辞書は、キーが同じであることを考慮する加算されなければ、d 1を用いることができる.update(d 2)は容易にマージできますが、このような後の辞書からの値は辞書d 1の値を上書きします.
2つの辞書を考慮する場合は、キーが値に加算される問題を考慮すると、次のいくつかの方法が使用できます.
方法1:
方法2:
方法3:
方法4:
方法5:
2つの辞書は、キーが同じであることを考慮する加算されなければ、d 1を用いることができる.update(d 2)は容易にマージできますが、このような後の辞書からの値は辞書d 1の値を上書きします.
>>> A = {'a': 1, 'b': 2}
>>> B = {'a': 8, 'c': 3}
>>> A.update(B)
>>> A
{'a': 8, 'b': 2, 'c': 3}
2つの辞書を考慮する場合は、キーが値に加算される問題を考慮すると、次のいくつかの方法が使用できます.
方法1:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> for key,value in B.items():
... if key in A:
... A[key] += value
... else:
... A[key] = value
>>> dict(sorted(A.items(), key=lambda d:d[1]))
{'a': 1, 'b': 6, 'd': 8, 'c': 9}
方法2:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key in list(set(A) | set(B)):
... if A.get(key) and B.get(key):
... C.update({key: A.get(key) + B.get(key)})
... else:
... C.update({key: A.get(key) or B.get(key)})
>>> C
{'c': 9, 'd': 8, 'a': 1, 'b': 6}
方法3:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> def dict_union(d1, d2):
... keys = d1.keys() | d2.keys()
... temp = {}
... for key in keys:
... temp[key] = sum([d.get(key,0) for d in (d1, d2)])
... return temp
>>> C = dict_union(A, B)
>>> C
{'d': 8, 'a': 1, 'b': 6, 'c': 9}
方法4:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key1 in A:
... for key2 in B:
... if key1 in B:
... C[key1] = A[key1] + B[key1]
... else:
... C[key1] = A[key1]
... if key2 not in A:
... C[key2] = B[key2]
>>> C
{'a': 1, 'd': 8, 'b': 6, 'c': 9}
方法5:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key in A:
... if B.get(key):
... C[key] = A[key] + B[key]
... else:
... C[key] = A[key]
>>> for key in B:
... if not A.get(key):
... C[key] = B[key]
>>> C
{'a': 1, 'b': 6, 'c': 9, 'd': 8}