Python에서 두 개의 딕셔너리 병합하는 방법 🚀

Python 딕셔너리 병합 방법 총정리

Python에서 두 개의 딕셔너리 병합하는 방법 🚀


Python에서 두 개의 딕셔너리를 단일 표현식으로 병합하는 방법에는 여러 가지가 있습니다. 특히, Python 버전에 따라 최적의 방식이 다를 수 있습니다. 이번 글에서는 다양한 방법을 정리하고 성능 비교까지 진행해보겠습니다! 🔥






1️⃣ Python 3.9+ (추천 ⭐)


Python 3.9부터는 집합의 합집합 연산자(|)를 딕셔너리에 사용할 수 있습니다. 가독성이 뛰어나고 성능도 우수합니다.




x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = x | y
print(z)  # {'a': 1, 'b': 3, 'c': 4}
    


위 코드에서 b 키는 두 딕셔너리에 존재하지만, y의 값이 우선합니다.






2️⃣ Python 3.5+ : 딕셔너리 언패킹


Python 3.5 이상에서는 딕셔너리 언패킹(**)을 이용할 수 있습니다.




x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = {**x, **y}
print(z)  # {'a': 1, 'b': 3, 'c': 4}
    


Python 3.9의 | 연산자와 같은 결과를 얻지만, 성능이 약간 떨어집니다.






3️⃣ Python 2 & 3 : update() 메서드


Python 2와 3에서 모두 사용 가능한 전통적인 방법은 update() 메서드를 활용하는 것입니다.




def merge_dicts(x, y):
    z = x.copy()
    z.update(y)
    return z

x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = merge_dicts(x, y)
print(z)  # {'a': 1, 'b': 3, 'c': 4}
    


이 방식은 두 개 이상의 딕셔너리 병합에도 사용할 수 있습니다.






💡 성능 비교


각 방법의 성능을 비교해보겠습니다.




from timeit import timeit

x = {i: i for i in range(10000)}
y = {i: -i for i in range(5000, 15000)}

print("Python 3.9+ (| 연산자)", timeit(lambda: x | y, number=10000))
print("Python 3.5+ (** 언패킹)", timeit(lambda: {**x, **y}, number=10000))
print("update() 메서드", timeit(lambda: merge_dicts(x, y), number=10000))
    


결과: Python 3.9+의 | 연산자가 가장 빠르고, 그 다음은 ** 언패킹, update() 순서입니다.






📝 결론


Python 버전에 따라 최적의 방법이 다릅니다.

  1. Python 3.9 이상: x | y
  2. Python 3.5 이상: {**x, **y}
  3. Python 2 & 3: update() 사용 ⭕

최신 버전을 사용할 수 있다면, Python 3.9 이상의 | 연산자를 추천합니다!






이 글이 도움 되셨다면, Ohchangss 블로그를 구독해주세요! 🎉