2012-06-06 2 views
5

나는이 사전의 다음 목록는 값

내가 얻을 수를 정렬 할 수 있습니다 방법
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}] 

: 내 말은

a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}] 

을 그 dicts 기준으로 정렬합니다 '값을 내림차순으로 정렬합니다.

+0

를 대신 사용 (또는 적어도 명심) 것입니다. 이에 대한 더 나은 데이터 유형이 있습니까? – tlunter

답변

1

당신은 list.sort() 방법에 key 파라미터를 전달할 수 있으므로 비교 key의 반환 값의 함수로 될 것이다 :이 경우

>>> a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}] 
>>> a.sort(key=lambda d: d.values()[0], reversed=True) 
>>> a 
[{23: 100}, {2: 102}, {3: 103}, {36: 103}, {43: 123}] 

키는 사전을 수신하는 기능이다 d이고 그 값의 목록은 .values()입니다. 값이 하나뿐이기 때문에 반환 된 목록에서이 값만 가져옵니다. 그런 다음 list.sort() 메서드는 정렬 할 때 사전 대신 사전에 반환 된 값을 비교합니다.

거의
sorted(a, key=dict.values, reverse=True) 

같은 일을하지만, 아마도 더 관용적 :

+0

이것은 오름차순으로 정렬을 제공하며, OP는 감소하기를 원합니다. – raym0nd

+2

@ raym0nd 확인, 고칠 수 있지만, 나는 HodfHod 솔루션을 선호한다고 말할 것입니다. :) – brandizzi

3
>>> sorted(a, key=lambda i: i.values()[0], reverse=True) 
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}] 
6

brandizzi의 대답 이외에, 당신은 갈 수 있습니다.

+0

+1 질문에 첫 번째 항목 만 정렬에 사용되도록 지정하지 않으면 동의합니다. – jamylak

+0

안녕하세요, 정렬 된'a' dict에서 int를 받아들이려면 어떻게 값을 추출 할 수 있습니까? 예 : '에있는 b에 대해 : [i] .keys() i + = 1' 을 인쇄하십시오. 그러나 파이썬에서는 여전히 목록이라고 말하면서 int를 암송해야합니다. 내가 어떻게 해 ? – user1403568

+0

@ user1403568'for b : print b.keys() [0]'을 시도하십시오. 43, 3, 36, 2, 23. 대신 값을 원한다면 (123,10336102100과 같이), b.values ​​() [0]'을 사용하십시오. – HodofHod

0

나는 그 사전의 각각 다른 키가 .itervalues()

In [25]: sorted(a, key=lambda x: x.itervalues().next, reverse=True) 
Out[25]: [{43: 123}, {36: 103}, {2: 102}, {23: 100}, {3: 103}]