Python 3은 값을 기준으로 딕트를 정렬합니다.
내가 찾은 유일한 방법은 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
.
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
사전 이해를 사용하여 값을 역순(가장 큰 값에서 가장 작은 값)으로 정렬할 수 있습니다.
{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)
사전을 정렬하기 위해 연산자 모듈을 사용할 수 있습니다.다음은 오퍼레이터 모듈 설명서입니다.
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를 사용할 수 있습니다.
필요한 것이 아니라면 튜플 목록을 남기는 정렬 함수를 다시 고려하는 것이 좋습니다.키-값 쌍(튜플)의 순서 목록이 아닌 경우 어떤 출력을 원하십니까?
언급URL : https://stackoverflow.com/questions/20944483/python-3-sort-a-dict-by-its-values
'code' 카테고리의 다른 글
루프가 종료된 후 변수를 루프하고 보존하는 동안 Bash에 입력을 파이프로 연결하는 방법 (0) | 2023.05.03 |
---|---|
초기화 문자열의 형식이 인덱스 0에서 시작하는 규격과 맞지 않습니다. (0) | 2023.05.03 |
Azure 앱 서비스를 64비트로 변경하는 방법 (0) | 2023.05.03 |
Xcode 4 - 콘솔/로그 창 분리 (0) | 2023.05.03 |
SQL Server에서 결과를 페이지로 이동하는 가장 좋은 방법은 무엇입니까? (0) | 2023.05.03 |