Nice programing

값 파이썬으로 dict 정렬

nicepro 2020. 10. 22. 22:48
반응형

값 파이썬으로 dict 정렬


이 질문에 이미 답변이 있습니다.

내가 사전을 가지고 있다고 가정합니다.

data = {1:'b', 2:'a'}

그리고 'b'와 'a'로 데이터를 정렬하여 결과를 얻습니다.

'a','b'

어떻게하나요?
어떤 아이디어?


값을 얻으려면

sorted(data.values())

일치하는 키를 얻으려면 key함수를 사용하십시오.

sorted(data, key=data.get)

값으로 정렬 된 튜플 목록을 얻으려면

sorted(data.items(), key=lambda x:x[1])

관련 : 여기 토론 참조 : 사전은 Python 3.6 이상에서 정렬됩니다.


정렬 된 목록을 얻는 대신 실제로 사전을 정렬하려면 collections.OrderedDict

>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']

귀하의 의견에서 gnibbler 답변에 이르기까지 값별로 정렬 된 키-값 쌍 목록을 원한다고 말하고 싶습니다.

sorted(data.items(), key=lambda x:x[1])

값 정렬 :

sorted(data.values())

보고

['a','b']

모든 답변에 감사드립니다. 당신은 모두 나의 영웅입니다 ;-)

결국 다음과 같이했습니다.

d = sorted(data, key = d.get)

for id in d:
    text = data[id]

또한 Python dict객체 유형이 해시 테이블 ( 여기에 자세히 설명 )이므로 키 / 값을 목록으로 변환하지 않고는 정렬 할 수 없다는 점에 유의하는 것이 중요하다고 생각 합니다. 이것이 허용 하는 것은 사전에있는 요소의 크기 / 수에 관계없이 dict일정한 시간에 항목 검색입니다 O(1).

즉, 키 sorted(data.keys())또는 값 을 정렬 sorted(data.values())하면 해당 목록을 사용하여 다음과 같은 디자인 패턴의 키 / 값에 액세스 할 수 있습니다.

for sortedKey in sorted(dictionary):
    print dictionary[sortedKeY] # gives the values sorted by key

for sortedValue in sorted(dictionary.values()):
    print sortedValue # gives the values sorted by value

도움이 되었기를 바랍니다.


John에 대한 귀하의 의견에서 값뿐만 아니라 사전의 키와 값을 원한다고 제안합니다.

PEP 256 은 값별로 사전을 정렬하기 위해 이것을 제안합니다.

import operator
sorted(d.iteritems(), key=operator.itemgetter(1))

내림차순을 원하면 다음을 수행하십시오.

sorted(d.iteritems(), key=itemgetter(1), reverse=True)

람다 방법 없음

# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
    for k, v in d.items():
        if v == i:
            return (k)

sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:   
    key = getkeybyvalue(d,i1)
    sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')

You could created sorted list from Values and rebuild the dictionary:

myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}

newDictionary={}

sortedList=sorted(myDictionary.values())

for sortedKey in sortedList:
    for key, value in myDictionary.items():
        if value==sortedKey:
            newDictionary[key]=value

Output: newDictionary={'one': '1', 'two': '2', '1four': '4', 'five': '5'}

참고URL : https://stackoverflow.com/questions/16772071/sort-dict-by-value-python

반응형