리스트에 담긴 여러 개의 딕셔너리를 특정 키(K)에 해당하는 값의 'i'번째 인덱스 문자를 기준으로 정렬해야 하는 경우, 파이썬의 내장 함수인 sorted 메서드와 람다(lambda) 함수를 함께 사용하면 간단하게 해결할 수 있습니다.
람다 함수는 각 딕셔너리를 인자로 받아 해당 딕셔너리에서 키 K의 값을 꺼낸 뒤, 그 문자열에서 i번째 문자를 추출하여 정렬 기준으로 반환합니다.
예제
아래는 실제 동작을 보여주는 예제 코드입니다.
my_list = [{"Python" : "Best", "to" : "Code"},
{"Python" : "Good", "to" : "Learn"},
{"Python" : "object", "to" : "cool"},
{"Python" : "oriented", "to" : "language"}]
print("The list is : " )
print(my_list)
K = "Python"
print("The value of K is ")
print(K)
i = 2
print("The value of i is :")
print(i)
my_result = sorted(my_list, key = lambda sub: sub[K][i])
print("The resultant list is : ")
print(my_result)출력 결과
The list is :
[{'Python': 'Best', 'to': 'Code'}, {'Python': 'Good', 'to': 'Learn'}, {'Python': 'object', 'to': 'cool'},
{'Python': 'oriented', 'to': 'language'}]
The value of K is
Python
The value of i is :
2
The resultant list is :
[{'Python': 'oriented', 'to': 'language'}, {'Python': 'object', 'to': 'cool'}, {'Python': 'Good', 'to':
'Learn'}, {'Python': 'Best', 'to': 'Code'}]코드 설명
딕셔너리 네 개로 구성된 리스트를 생성한 후 콘솔에 출력합니다.
정렬 기준이 될 키 이름 'K'를 정의하고 콘솔에 출력합니다.
기준이 될 인덱스 번호 'i'를 정의하고 콘솔에 출력합니다.
sorted메서드에 람다 함수를 key 인자로 전달하여 리스트를 정렬합니다. 이때 람다 함수는 각 딕셔너리에서sub[K][i], 즉 키 K의 값 문자열에서 i번째 문자를 추출해 비교 기준으로 사용합니다.정렬된 결과는 새로운 변수
my_result에 할당됩니다.최종적으로 해당 변수를 콘솔에 출력합니다.
정렬 결과 분석
i = 2일 때 각 키 값의 세 번째 문자는 다음과 같습니다.
'oriented' → 'i'
'object' → 'j'
'Good' → 'o'
'Best' → 's'
문자의 아스키(ASCII) 코드 순서대로 오름차순 정렬되므로 'i' < 'j' < 'o' < 's' 순서가 되어, 위와 같은 결과 리스트가 만들어집니다. 내림차순으로 정렬하고 싶다면 sorted 함수에 reverse=True 옵션을 추가하면 됩니다.