Python - 두개의 딕셔너리 병합 (merge)

두개의 dictionary를 병합(merge)하는 방법을 소개합니다.

1. 딕셔너리에 인자로 전달된 딕셔너리의 모든 요소를 병합(merge, 합치기)

d1.update(d2)는 d2를 d1에 병합합니다. 즉, 딕셔너리 d1의 요소는 업데이트되어 변형이 발생합니다. 딕셔너리 d2는 데이터 변경이 없습니다.

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'d': 4, 'e': 5, 'f': 6}

d1.update(d2)

print('d1:', d1)
print('d2:', d2)

Output:

d1: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
d2: {'d': 4, 'e': 5, 'f': 6}

2. 새로운 딕셔너리에 두개의 딕셔너리를 병합(merge, 합치기)

dict(d1, **d2)는 d1과 d2를 새로운 딕셔너리에 병합합니다. 즉, 딕셔너리 d1, d2의 원본 데이터는 변형되지 않습니다. 병합된 새로운 딕셔너리 객체가 만들어집니다.

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'d': 4, 'e': 5, 'f': 6}

d3 = dict(d1, **d2)

print('d1:', d1)
print('d2:', d2)
print('d3:', d3)

Output:

d1: {'a': 1, 'b': 2, 'c': 3}
d2: {'d': 4, 'e': 5, 'f': 6}
d3: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

3. 병합할 때, 중복된 key의 value는 새로운 값으로 업데이트

두개의 딕셔너리를 병합할 때, 중복된 key가 있으면 나중에 업데이트되는 key의 value로 변경됩니다.

아래 예제에서 d1의 'c': 3과 d2의 'c': 4는 중복된 key를 갖고 있습니다. 이것을 병합할 때 d2의 value로 업데이트됩니다. 즉, 'c': 4가 됩니다.

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'c': 4, 'd': 5, 'e': 6}

d3 = dict(d1, **d2)

print('d3:', d3)

Output:

d3: {'a': 1, 'b': 2, 'c': 4, 'd': 5, 'e': 6}

4. 병합할 때, 중복된 key의 value는 이전 값을 유지

중복된 key가 있을 때, value를 업데이트하지 않고, 모든 value를 list에 저장하여 보존할 수 있습니다.

from itertools import chain
from collections import defaultdict

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'c': 4, 'd': 5, 'e': 6}

d3 = defaultdict(list)

for k, v in chain(d1.items(), d2.items()):
    d3[k].append(v)

print(d3)

for k, v in d3.items():
    print(k, v)

Output:

defaultdict(<class 'list'>, {'a': [1], 'b': [2], 'c': [3, 4], 'd': [5], 'e': [6]})
a [1]
b [2]
c [3, 4]
d [5]
e [6]

References

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha