내가 찾은 유일한 방법은 python2에서 작동하거나 튜플 목록 만 반환합니다.
{"aa": 3, "bb": 4, "cc": 2, "dd": 1}
값을 기준으로 사전을 정렬 할 수 있습니까?
내가 달성하고자하는 정렬 된 사전의 순서는 가장 큰 것에서 가장 작은 것까지입니다. 결과가 다음과 같기를 바랍니다.
bb 4
aa 3
cc 2
dd 1
정렬 후 텍스트 파일에 저장하고 싶습니다.
내가 찾은 유일한 방법은 python2에서 작동하거나 튜플 목록 만 반환합니다.
{"aa": 3, "bb": 4, "cc": 2, "dd": 1}
값을 기준으로 사전을 정렬 할 수 있습니까?
내가 달성하고자하는 정렬 된 사전의 순서는 가장 큰 것에서 가장 작은 것까지입니다. 결과가 다음과 같기를 바랍니다.
bb 4
aa 3
cc 2
dd 1
정렬 후 텍스트 파일에 저장하고 싶습니다.
답변:
itemgetter
(다른 답변 참조) 큰 사전에는 (내가 아는 바와 같이) 더 효율적이지만 일반적인 경우에는 그것이 이긴다고 생각합니다 d.get
. 그리고 추가 import
.
>>> d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
>>> for k in sorted(d, key=d.get, reverse=True):
... k, d[k]
...
('bb', 4)
('aa', 3)
('cc', 2)
('dd', 1)
선택적으로 설정할 수있는 참고 d.__getitem__
로 key
위에 작은 성능 향상을 제공 할 수 있습니다 기능 d.get
.
[x for x in iterable]
Python List Comprehension (google)은 목록을 생성하는 데 매우 일반적이고 효율적인 Python입니다. (k, d[k])
두 요소 튜플이고 두 번째 요소 ( d[k]
)는 사전의 값입니다. sorted()
값별로 정렬 된 사전의 키를 반환하는 내장 함수입니다. key=d.get
아는 것이 사소하지 않은 내 대답의 열쇠를 사용 합니다. 내장 함수를 아는 것은 필수적입니다. 도움이 되었기를 바랍니다.
[x for x in iterable]
"목록의 이해"를 소개 과정에서 누락 된 것입니다. 이제 그것에 대해 읽고 있습니다 (이름을 모르는 것을 찾기가 어려웠습니다).
from collections import OrderedDict
from operator import itemgetter
d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
print(OrderedDict(sorted(d.items(), key = itemgetter(1), reverse = True)))
인쇄물
OrderedDict([('bb', 4), ('aa', 3), ('cc', 2), ('dd', 1)])
마지막 문장에서 튜플 목록이 잘 작동하는 것처럼 보입니다.
from operator import itemgetter
d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
for key, value in sorted(d.items(), key = itemgetter(1), reverse = True):
print(key, value)
어느 인쇄
bb 4
aa 3
cc 2
dd 1
dict
지금 삽입 순서를 유지하므로 사용에 이유가 없다OrderedDict
딕셔너리 이해를 사용하여 역순 (최대에서 최소) 으로 값 을 정렬 할 수 있습니다 .
{k: d[k] for k in sorted(d, key=d.get, reverse=True)}
# {'b': 4, 'a': 3, 'c': 2, 'd': 1}
값 을 오름차순 (가장 작은 것에서 가장 큰 것)으로 정렬하려는 경우
{k: d[k] for k in sorted(d, key=d.get)}
# {'d': 1, 'c': 2, 'a': 3, 'b': 4}
당신은별로 정렬하려면 키를 오름차순으로
{k: d[k] for k in sorted(d)}
# {'a': 3, 'b': 4, 'c': 2, 'd': 1}
이것은 사전이 삽입 순서를 유지하기 때문에 CPython 3.6+ 및 Python 3.7+의 모든 구현에서 작동합니다.
또 다른 방법은 람다 식을 사용하는 것입니다. 인터프리터 버전과 정렬 된 사전 또는 정렬 된 키-값 튜플 (OP처럼)을 만들 것인지 여부에 따라 허용되는 답변보다 빠를 수도 있습니다.
d = {'aa': 3, 'bb': 4, 'cc': 2, 'dd': 1}
s = sorted(d.items(), key=lambda x: x[1], reverse=True)
for k, v in s:
print(k, v)
print(s)
에는 루프 대신에 할 수 있습니다. :)
dict
3.7로 시작하는 모든 비단뱀의 순서를 유지 s의
사전을 정렬하려면 연산자 모듈을 사용할 수 있습니다. 다음 은 운영자 모듈 문서입니다.
import operator #Importing operator module
dc = {"aa": 3, "bb": 4, "cc": 2, "dd": 1} #Dictionary to be sorted
dc_sort = sorted(dc.items(),key = operator.itemgetter(1),reverse = True)
print dc_sort
출력 순서는 정렬 된 목록이됩니다.
[('bb', 4), ('aa', 3), ('cc', 2), ('dd', 1)]
키와 관련하여 정렬하려면 다음을 사용할 수 있습니다.
dc_sort = sorted(dc.items(),key = operator.itemgetter(0),reverse = True)
출력 순서는 다음과 같습니다.
[('dd', 1), ('cc', 2), ('bb', 4), ('aa', 3)]
사전을 정렬하고 나중에 사전으로 작동하도록 유지 하려면 표준 라이브러리에서 OrderedDict 를 사용할 수 있습니다 .
이것이 필요한 것이 아니라면 튜플 목록을 남기는 정렬 함수를 재고하는 것이 좋습니다. 순서가 지정된 키-값 쌍 (튜플) 목록이 아니라면 어떤 출력을 원했습니까?
dict
지금 삽입 순서를 유지하므로 사용에 이유가 없다OrderedDict