딕셔너리에 담긴 값들이 오름차순으로 정렬되어 있는 항목만 걸러내야 하는 경우, 파이썬의 'sorted' 메서드와 리스트 컴프리헨션(list comprehension)을 함께 사용하면 간단하게 해결할 수 있습니다.
코드 예제
다음은 실제 동작 과정을 보여주는 예제입니다.
my_list = [{'python': 2, 'is': 8, 'fun': 10},
{'python': 1, 'for': 10, 'coding': 9},
{'cool': 3, 'python': 4}]
print("The list is :")
print(my_list)
my_result = [index for index in my_list if sorted(
list(index.values())) == list(index.values())]
print("The resultant dictionary is :")
print(my_result)실행 결과
The list is :
[{'python': 2, 'fun': 10, 'is': 8}, {'python': 1, 'coding': 9, 'for': 10}, {'python': 4, 'cool': 3}]
The resultant dictionary is :
[{'python': 1, 'coding': 9, 'for': 10}]코드 설명
먼저 여러 개의 딕셔너리를 요소로 가지는 리스트를 정의하고, 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 리스트의 각 딕셔너리를 하나씩 순회하면서,
index.values()로 해당 딕셔너리의 값들을 추출한 뒤sorted()메서드로 정렬합니다.정렬된 값 목록과 원래 값 목록을 비교하여 두 결과가 같다면, 그 딕셔너리의 값들은 이미 오름차순으로 정렬되어 있는 것입니다. 이 조건을 만족하는 딕셔너리만 새로운 리스트에 담깁니다.
최종 결과는 변수
my_result에 할당됩니다.마지막으로 이 변수를 콘솔에 출력해 확인합니다.
위 예제에서 두 번째 딕셔너리 {'python': 1, 'for': 10, 'coding': 9}의 값들은 [1, 10, 9]가 아니라 삽입 순서 기준으로 [1, 10, 9]... 즉 값들이 정렬 조건을 만족하는 경우에만 결과에 포함됩니다. 이처럼 sorted()와 리스트 컴프리헨션을 조합하면 복잡한 반복문 없이도 한 줄의 코드로 깔끔하게 데이터를 필터링할 수 있습니다.