리스트 안에 여러 개의 딕셔너리가 들어 있을 때, 이들 딕셔너리에 포함된 모든 고유한 값(unique values)을 한 번에 추출해야 하는 경우가 종종 있습니다. 가장 간단한 방법은 각 딕셔너리의 값을 순회한 뒤 set()으로 감싸 중복을 제거하고, 이를 다시 list()로 변환하여 콘솔에 출력하는 것입니다.
예제 코드
아래 예제는 위 과정을 실제로 구현한 것입니다.
my_list = [{'hi': 11, 'there': 28}, {'how': 11, 'are': 31}, {'you': 28, 'Will': 31}]
print('The list is:')
print(my_list)
my_result = list(set(value for dic in my_list for value in dic.values()))
print('The result is:')
print(my_result)실행 결과
The list is:
[{'there': 28, 'hi': 11}, {'how': 11, 'are': 31}, {'Will': 31, 'you': 28}]
The result is :
[11, 28, 31]코드 설명
딕셔너리 세 개를 담은 리스트를 정의한 뒤, 콘솔에 그대로 출력합니다.
제너레이터 표현식의 중첩
for문을 사용해 리스트를 순회하면서 각 딕셔너리의values(), 즉 값에만 접근합니다.set()으로 감싸 중복된 값을 제거하고 고유한 값만 남깁니다.결과 집합을
list()로 변환하여 변수my_result에 저장합니다.최종 결과인 [11, 28, 31]이 콘솔에 출력됩니다.
응용: 값의 등장 순서 유지하기
set()은 해시 기반 자료구조이므로 요소의 순서를 보장하지 않습니다. 값이 원본 데이터에서 처음 나타난 순서를 그대로 유지하고 싶다면 dict.fromkeys()를 활용하면 좋습니다.
my_result = list(dict.fromkeys(value for dic in my_list for value in dic.values())) print(my_result) # [11, 28, 31] - 등장 순서대로 출력됩니다.