값으로 파이썬 사전을 정렬하는 방법
- 값으로 파이썬 정렬 사전-정렬 된 값만 가져 오기
-
operator.itemgetter
를 사용하여 파이썬 사전 정렬 -
sorted
키에서lambda
함수를 사용하여 파이썬을 사전으로 정렬 -
파이썬 사전 정렬에서 사전 호환 결과를 얻기위한
OrderedDict
파이썬 사전은 순서가없는 데이터 유형이므로 키나 값으로 파이썬 사전을 정렬 할 수 없습니다. 그러나 목록과 같은 다른 데이터 형식으로 정렬 된 파이썬 사전을 얻을 수 있습니다.
아래와 같은 사전이 있다고 가정합니다.
exampleDict = {"first": 3, "second": 4, "third": 2, "fourth": 1}
값으로 파이썬 정렬 사전-정렬 된 값만 가져 오기
sortedDict = sorted(exampleDict.values())
# Out: [1, 2, 3, 4]
operator.itemgetter
를 사용하여 파이썬 사전 정렬
import operator
sortedDict = sorted(exampleDict.items(), key=operator.itemgetter(1))
# Out: [('fourth', 1), ('third', 2), ('first', 3), ('second', 4)]
exampleDict.items
는 사전 요소의 키-값 쌍을 반환합니다. key=operator.itemgetter(1)
은 비교 키가 사전의 값을 지정하는 반면,operator.itemgetter(0)
은 사전 키의 비교 키를 갖습니다.
sorted
키에서 lambda
함수를 사용하여 파이썬을 사전으로 정렬
operator.itemgetter
대신 비교 키를 얻기 위해 lambda
함수를 사용할 수도 있습니다.
sortedDict = sorted(exampleDict.items(), key=lambda x: x[1])
# Out: [('fourth', 1), ('third', 2), ('first', 3), ('second', 4)]
exampleDict.items()
는 사전의 키-값 쌍 목록을 반환하며 해당 요소의 데이터 유형은 튜플입니다. x
는이 튜플의 요소입니다. 여기서 x[0]
이 키이고 x[1]
이 값입니다. key=lambda x:x[1]
는 비교 키가 사전 요소의 값임을 나타냅니다.
값을 내림차순으로 정렬해야하는 경우 선택적 매개 변수 reverse
를 True
로 설정할 수 있습니다.
sortedDict = sorted(exampleDict.items(), key=lambda x: x[1], reverse=True)
# Out: [('second', 4), ('first', 3), ('third', 2), ('fourth', 1)]
파이썬 사전 정렬에서 사전 호환 결과를 얻기위한 OrderedDict
위에 표시된 예제 코드는 결과를 사전 유형이 아닌 목록으로 리턴합니다. 결과를 사전 호환 유형으로 유지하려면 Python 2.7에서 소개 된 OrderedDict
가 올바른 선택입니다.
from collections import OrderedDict
sortedDict = OrderedDict(sorted(exampleDict.items(), key=lambda x: x[1]))
# Out: OrderedDict([('fourth', 1), ('third', 2), ('first', 3), ('second', 4)])
OrderedDict
는 일반적인 메소드를 지원하고 키가 처음으로 삽입 된 순서를 기억하는 Python dict
서브 클래스입니다.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook