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 버전에 따라 최적의 방법이 다릅니다.
- Python 3.9 이상:
x | y
⭐ - Python 3.5 이상:
{**x, **y}
✅ - Python 2 & 3:
update()
사용 ⭕
최신 버전을 사용할 수 있다면, Python 3.9 이상의 |
연산자를 추천합니다!
이 글이 도움 되셨다면, Ohchangss 블로그를 구독해주세요! 🎉