2012-03-07 4 views
1

어떻게 정렬합니까 에 의해 'votes' 파이썬으로? 의 결과에파이썬에서 다른 사전의 값으로 사전을 정렬하십시오.

{ 
    1 : { 
    'votes' : 2, 
    'id' : 10 
    }, 
    2 : { 
    'votes' : 10, 
    'id' : 12 
    }, 
    3 : { 
    'votes' : 98, 
    'id' : 14 
    } 
} 

:

{ 
    3 : { 
    'votes' : 98, 
    'id' : 14 
    }, 
    2 : { 
    'votes' : 10, 
    'id' : 12 
    }, 
    1 : { 
    'votes' : 2, 
    'id' : 10 
    } 
} 
+5

한숨. 사전은 정렬되지 않습니다. –

+1

사전에 정렬이 없습니다. 게시물의 두 사전이 같습니다. –

+0

사전에는 순서가 없으므로 전혀 정렬 할 수 없습니다. 당신은 정말로 무엇을 성취하려고합니까? –

답변

4

당신이 사용할 수있는 OrderedDict : d 원래 사전입니다

>>> from collections import OrderedDict 
>>> od = OrderedDict(sorted(d.items(), 
        key=lambda t: t[1]['votes'], 
        reverse=True)) 
>>> od 
OrderedDict([(3, {'votes': 98, 'id': 14}), 
      (2, {'votes': 10, 'id': 12}), 
      (1, {'votes': 2, 'id': 10})]) 

.

3

사전은 특정 순서로 사전에서 요소에 액세스 할 수 있도록하려는 경우 jcollado의 답변에서 OrderedDict을 사용하거나 관심있는 측정 항목에 따라 키 목록을 정렬 할 수 있습니다. 예 :

data = {1: {'votes': 2, 'id': 10}, 2: {'votes': 10, 'id': 12}, 3: {'votes': 98, 'id': 14}} 
votes_order = sorted(data, key=lambda k: data[k]['votes'], reverse=True) 
for key in votes_order: 
    print key, ':', data[key] 

출력 :

3 : {'votes': 98, 'id': 14} 
2 : {'votes': 10, 'id': 12} 
1 : {'votes': 2, 'id': 10} 
0

표준 사전 그래서 그들을 이해되지 않는다 정렬 순서가 없습니다. 두 사전은 완전히 동일합니다.

아마 당신이 원하는 것은 목록일까요?

aslist = originaldict.values() 
aslist.sort(key=lambda item:item['votes'], reverse=True) 

이리스트로 DICT에서 항목을 추출하고 votes하여 목록 리조트. 프랜시스 '제안과 같은

print sorted(d.items(), key=lambda x: x[1]['votes'], reverse=True) 

을,하지만 당신은 모든 항목에 대한 원래의 키를 알고

+0

나중에 항목을 직접 복구하기 위해 해시가 필요합니다. 그러나 전에 필자는 다른 것들에 대한 사전을 마운트하고 정렬해야합니다. –

+0

dict를 "풀"로 사용하고 정렬 된 목록을 색인으로 사용합니다. (항목은 복사되지 않으므로 여러 데이터 구조에서 동일한 리프 사전을 사용할 수 있습니다.) Dicts *에는 주문 *이 없으므로 주문이 중요하면 다른 것을 사용해야합니다. BTW, 목록 항목 get/set은 O (1) (dict보다 빠름)이므로, 원래 dict조차도 모든 것에 대해 목록을 사용하는 것이 더 나을 것입니다! –

0

또한 사전에 항목을 정렬 할 수 있습니다.

+0

나는 내 속도에 약간의 노력을해야만한다 ... –

+0

** 사전에는 주문이 없다. ** ** –

관련 문제