[파이썬] 딕셔너리 합치기(key 같을 때 정리)
- Python/기초
- 2023. 11. 23.
딕셔너리 합치기
딕셔너리 합치는 방법입니다.
간단합니다만 딕셔너리 특성상 key 가 같은 경우에는 덮어쓰기가 되니깐 그부분을 잘 조작하면 내가 원하는대로 딕셔너리를 다룰 수 있습니다.
딕셔너리 합치는 방법
2개의 딕셔너리를 합치는 방법은 간단합니다. update()라는 함수를 쓰면 됩니다.
test1 = {'A':1,'B':2,'C':3}
test2 = {'A':2,'D':4,'E':5}
test1.update(test2)
print(test1)
3개 이상일 때도 update를 이용해서 반복하면 됩니다. 한꺼번에 하려면 다음과 같이 합니다.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict3 = {'d': 5}
merged_dict = {**dict1, **dict2, **dict3}
print(merged_dict)
위와 같이 하는 경우 문제는 같은 값은 덮어버리는 것입니다.
값은 key라면 value를 어떻게 할것인가?
update()함수를 통해 간단하게 딕셔너리를 합쳤습니다. 하지만 같은 값이면 어떻게 해야할지에 따라 코딩하는 게 달라집니다. if else를 써서 같은 값인 경우를 분별해서 하는일을 다르게 합니다.
아래 예제는 딕셔너리 key 가 같으면 value의 합을 구하는 예제입니다. 이 프로세스와 비슷하게 가면 됩니다.
test1 = {'A':1,'B':2,'C':3}
test2 = {'A':2,'D':4,'E':5}
# 값 겹칠때 value 합치기
def sum_dict(test1,test2):
result = {}
for key,value in test1.items():
if key in result:
result[key] += value
else:
result[key] = value
for key,value in test2.items():
if key in result:
result[key] +=value
else:
result[key] = value
return result
sum_dict(test1,test2)
딕셔너리를 따로따로 result에 넣어서 확인하는 방식입니다.
같은 방식으로 key가 같으면 value 값을 리스트에 넣어보겠습니다.
# key 값 겹칠 때 value 값 리스트로 만들어서 합치기
def sum_dict2(test1,test2):
result = {}
for key, value in test1.items():
if key in result:
if result[key] !=value:
result[key] = [result[key],value]
else:
result[key] = value
for key, value in test2.items():
if key in result:
if result[key] != value:
result[key] = [result[key],value]
else:
result[key] = value
return result
sum_dict2(test1,test2)
이렇게 하면 value 값을 모두 보존하면서도 딕셔너리를 만들 수 있게 됩니다.
3개 이상의 딕셔너리를 합치는 함수 만들기
위의 함수는 2개인 경우만 가능했습니다. 그렇지만 3개 이상의 딕셔너리도 가능하게 만들려면 asterisk(*) 을 활용합니다.
def merge_dicts(*dicts):
merged_dict = {}
for d in dicts:
for key, value in d.items():
if key in merged_dict:
# 이미 key가 존재하는 경우, 새로운 값으로 업데이트
current_value = merged_dict[key]
if isinstance(current_value, list):
if not value in current_value:
current_value.append(value)
elif current_value != value:
merged_dict[key] = [current_value, value]
else:
# 새로운 key인 경우 값 그대로 추가
merged_dict[key] = value
return merged_dict
# 예제 딕셔너리들
dict1 = {'a': [3, 5], 'b': 2, 'c': 3}
dict2 = {'b': [2], 'c': 3, 'd': 6}
dict3 = {'c': 7, 'd': 8, 'e': 9}
# 함수 호출
result = merge_dicts(dict1, dict2, dict3)
print(result)
isinstance를 이용해 리스트인지를 확인하고 리스트가 아니면 리스트로 변환후 값을 집어넣습니다.
마치며
딕셔너리 합치는 방법에 알아보았습니다. 같은 key 값 value가 다를 때 update()함수를 쓰면 덮어쓰기가 됩니다. 덮어쓰기를 하지 않으려면 자신이 원하는대로 함수를 만들어서 딕셔너리 병합을 마무리하면 되겠습니다.
함께 보면 좋은 글
'Python > 기초' 카테고리의 다른 글
[파이썬] 리스트 같은 원소값 가져오기 (0) | 2024.05.25 |
---|---|
[파이썬] 클래스 상속연결하기(Method Overriding) (0) | 2023.12.11 |
[파이썬] 인스턴스 타입 확인하고 넘기기(객체 동적 확인) (0) | 2023.11.18 |
[파이썬] 리스트 복사하기 (0) | 2023.10.16 |
[파이썬] 대소문자 변경 (0) | 2023.09.25 |