2011-09-26 6 views

답변

4

당신은 비교 키와 날짜에, 값에 sorted() 함수를 호출 할 수 있습니다 : 당신은 DICT을 정렬 할 수 없습니다

sorted(d.values(), key=lambda item: item["l"]["created_on"]) 
+2

모든 정보를 유지하려면 다음을 수행하십시오. – rocksportrocker

+1

그리고 @rocksportrocker 메소드를 거기에 랩핑 할 수 있습니다 (예 : d.items(), key = lambda k, it : it [ "l"] [ "created_on"]). 'OrderedDict()'를 매핑으로 사용하기를 원한다면. – agf

1

() 자체를.

>>> print dict(a=3, b=2, c=1) 
{'a': 3, 'c': 1, 'b': 2} 

당신이 당신의 딕셔너리의 전체 구조를 유지하려면

, 당신이 먼저 목록 li로 DICT dd을 평평하게하려면 다음 딕셔너리는 더 implict 순서가 없습니다. 그런 다음 당신은 키와 datetime 값으로 정렬 할 수 있습니다

import operator 

dd = { 1: ..... } 

li = [] 

for (i, it) in dd.items(): 
    for (l, it1) in it.items(): 
     for (c, dt) in it.items(): 
      li.append((i, l, c, dt)) 
li.sort(key=operator.itemgetter(3)) 

print li 
+0

이 버전이 어떻게 전체 구조를 유지하는지,'sorted (d.items() ... ')가 실패한 것을 보지 못했습니까? 특히'OrderedDict'에 래핑되어 매핑을 되 찾을 수 있기 때문에 – agf

+0

첫 번째 레벨에서 키를 유지합니다. 값() – rocksportrocker

+0

을 반복 할 경우 손실됩니다. 그러나 평평하지는 않지만 항목의 깊이는 유지하는'items() '를 사용하면 안됩니다. 'dict' - 그래서 당신이 그것을 평평하게해야한다고 말하는 것은 잘못입니다. 이것을 해보는 것이 가장 좋은 방법이기 때문에,이 해설에 그 주석을 추가해야합니다. – agf

3

있습니다 (사전 스스로 정렬 할 수 없습니다) 당신의 사전 d에 대한 키의 정렬 된 목록을 얻을 수 있습니다 :

>>> sorted(d.keys(), key=lambda k: d[k]['l']['created_on']) 
[2, 1, 3] 

PS : 만약 정렬 된 키가있는 사전이 정말로 필요합니다. 이제는 표준 OrderedDict 유형이 친구입니다 (rocketportrocker 및 Fredéric의 대답 이후의 agf 주석에 설명 된대로).

관련 문제