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

By JS | Last updated: July 03, 2021

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

기존 딕셔너리에 병합

d1.update(d2)는 d2를 d1에 병합합니다. 즉, 원본 d1이 변형됩니다.

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}

새로운 딕셔너리에 병합

dict(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}

중복된 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}

중복된 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

Related Posts

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha