Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 두 딕셔너리의 키 차이 구하는 방법

두 개의 Python 딕셔너리는 서로 일부 키를 공유하는 경우가 많습니다. 이 글에서는 주어진 두 딕셔너리에서 공통되지 않은 키, 즉 키의 차이를 구하는 대표적인 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.

1. set() 함수로 차집합 구하기

첫 번째 방법은 딕셔너리를 set() 함수로 집합으로 변환한 뒤 차집합(-) 연산을 수행하는 것입니다. 첫 번째 딕셔너리에서 두 번째 딕셔너리를 뺀 결과와, 반대로 두 번째에서 첫 번째를 뺀 결과를 모두 구하면 양쪽에 공통으로 존재하지 않는 키들이 각각 나열됩니다.

예제 코드

dictA = {'1': 'Mon', '2': 'Tue', '3': 'Wed'}
print("1st Dictionary:\n", dictA)
dictB = {'3': 'Wed', '4': 'Thu', '5': 'Fri'}
print("2nd Dictionary:\n", dictB)

res1 = set(dictA) - set(dictB)
res2 = set(dictB) - set(dictA)
print("\nThe difference in keys between both the dictionaries:")
print(res1, res2)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

1st Dictionary:
{'1': 'Mon', '2': 'Tue', '3': 'Wed'}
2nd Dictionary:
{'3': 'Wed', '4': 'Thu', '5': 'Fri'}

The difference in keys between both the dictionaries:
{'2', '1'} {'4', '5'}

결과를 보면 res1에는 첫 번째 딕셔너리에만 있는 키인 '1', '2'가, res2에는 두 번째 딕셔너리에만 있는 키인 '4', '5'가 담겨 있습니다.

2. in 연산자와 for 반복문 활용하기

두 번째 방법은 for 반복문으로 한 딕셔너리의 키를 하나씩 순회하면서, in 연산자로 해당 키가 다른 딕셔너리에 존재하는지 검사하는 방식입니다. 특정 딕셔너리에만 있는 키를 직관적으로 필터링하고 싶을 때 유용합니다.

예제 코드

dictA = {'1': 'Mon', '2': 'Tue', '3': 'Wed'}
print("1st Dictionary:\n", dictA)
dictB = {'3': 'Wed', '4': 'Thu', '5': 'Fri'}
print("2nd Dictionary:\n", dictB)

print("\nThe keys in 1st dictionary but not in the second:")
for key in dictA.keys():
    if key not in dictB:
        print(key)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

1st Dictionary:
{'1': 'Mon', '2': 'Tue', '3': 'Wed'}
2nd Dictionary:
{'3': 'Wed', '4': 'Thu', '5': 'Fri'}

The keys in 1st dictionary but not in the second:
1
2

추가 팁: dict.keys()는 집합 연산을 지원합니다

Python 3부터 dict.keys()가 반환하는 뷰(view) 객체는 집합 연산을 기본적으로 지원합니다. 따라서 굳이 set()으로 변환하지 않고도 아래와 같이 작성할 수 있습니다.

# set() 변환 없이 바로 차집합 계산
res1 = dictA.keys() - dictB.keys()

# 양쪽 어느 한쪽에만 있는 모든 키(대칭 차집합)를 한 번에 구하기
all_diff = dictA.keys() ^ dictB.keys()
print(all_diff)  # {'1', '2', '4', '5'}

^(대칭 차집합) 연산자를 사용하면 두 딕셔너리 중 어느 한쪽에만 존재하는 모든 키를 한 번에 얻을 수 있어, 양방향 차이를 동시에 확인할 때 특히 편리합니다.