code

Python 3은 값을 기준으로 딕트를 정렬합니다.

starcafe 2023. 5. 3. 21:35
반응형

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

반응형