2014-12-11 4 views
3

내가 사전에 붙어있어 제거하고 Python으로 정렬, 나는 다음과 같은 값을 사전에 저장 한 : 사전은 정렬 및

{'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112} 

내가하고 싶은 :

1) 그래서 이러한 정렬 그들이 반환해야 기능 위의 예에서 이름 만

에게

예를 떠나는
2) 사전에서 점수를 제거 점수를 최소로, 첫번째 가장 높은 점수에 의해 정렬 :

['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA'] 

답변

7

당신은 sorted 쉽게이 작업을 수행 할 수 있습니다 출력 이름 목록 그래도이라고

>>> d = {'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112} 
>>> sorted(d, key=d.get, reverse=True) 
['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA'] 
>>> 

참고. 사전이나 집합은 모두 자연 순서가 없기 때문에 파이썬에서 정렬 할 수 없습니다.

+0

알 니스, 당신이 사전을 정렬 할 수 몰랐어요! –

+0

@ReutSharabani - 사전을 정렬 할 수 없습니다. 이 작업은 사전의 키를 반복하고 순서를 결정하기 위해'dict.get '을 사용하여 정렬 된 목록으로 수집하는 것입니다. – iCodez

+0

알아, 나는 사전 키에'sorted '를 직접 사용하는 것을 의미했다. 반면에'list' 나'tuple'처럼 반복 할 수 있습니다. 그렇다면 왜 ... –

2
다음과 같이 할 수

: 결과

d1 = {'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112} 
print([n for n,s in sorted(d1.items(), key=lambda v:v[1], reverse=True)]) 

:

['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA'] 
0

사전 orderless 때문에, 사전을 정렬 할 수 없습니다 만, 같은 목록과 같은 다른 유형, 튜플은 아닙니다.하지만 당신은 정렬 된 표현을 가질 수 있습니다. 예를 들어

,

import operator 
x = {first: 2, second: 4, third:3, fourth:1, fifth:0} 
sorted_x = sorted(x.items(), key=operator.itemgetter(1)) 

또는 당신은 또한 DIC를 유지하고 정렬

sorted(x.values()) to get a sorted representation. 
0

에게 옵션을 수행 할 수 있습니다

>>>from collections import OrderedDict 

>>> # regular unsorted dictionary 
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2} 

>>> # dictionary sorted by key 
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0])) 
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) 

>>> # dictionary sorted by value 
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1])) 
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) 

>>> # dictionary sorted by length of the key string 
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0]))) 
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)]) 

세부 사항 : 분류는 역이있다 (bool) arg, 예 :

>>> OrderedDict(sorted(d.items(), key=lambda t: t[0], reverse = True)) 
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) 

사용은 정상입니다 :

>>> dic = OrderedDict(sorted(d.items(), key=lambda t: t[0])) 
>>> dic['banana'] 
3 

글꼴 : https://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipes

관련 문제