2013-05-02 2 views
2

나는사전 : 별 정렬 특정 키

나는 2.7을 사용하고 있는데 몇 가지 시도 내가 키 = 우선 순위에 의해이 사전을 정렬 할 필요가이

{'Africa': {'Name': 'Africa', 
      'men': 33333, 
      'priority': 3, 
      'women': 30000}, 
'America': {'Name': 'USA', 
      'men': 1114444411333L, 
      'priority': 4, 
      'women': 44430000}, 
'Asia': {'Name': 'China', 
      'men': 444433333, 
      'priority': 2, 
      'women': 444430000}, 
'Europe': {'Name': 'UK', 
      'men': 11111333, 
      'priority': 1, 
      'women': 1111430000}} 

과 같은 사전을 가지고 옵션 (매우 우아 해 보이지 않음). 어떤 제안?

+2

Pythonic이 얼마나 만족 스러운지 평가할 수 있도록 기존 코드를 추가 할 수 있습니까? :) – Talvalin

+0

귀하의 예제는 각 사전 키가 해당 값으로 정확히 하나의 사전을 가지고 있음을 의미합니다. 그게 사실이야? – JosefAssad

답변

8
>>> d = {"Africa" : 
     { "Name" : "Africa", "men": 33333, "women" : 30000, "priority" :3}, 
"Asia": 
     { "Name" : "China", "men": 444433333, "women" : 444430000, "priority" :2}, 
"Europe": 
     { "Name" : "UK", "men": 11111333, "women" : 1111430000, "priority" :1}, 
"America": 
     { "Name" : "USA", "men": 1114444411333, "women" : 44430000, "priority" :4} 
} 
>>> from collections import OrderedDict 
>>> OrderedDict(sorted(d.items(), key=lambda x: x[1]['priority'])) 
OrderedDict([('Europe', {'priority': 1, 'men': 11111333, 'Name': 'UK', 'women': 1111430000}), ('Asia', {'priority': 2, 'men': 444433333, 'Name': 'China', 'women': 444430000}), ('Africa', {'priority': 3, 'men': 33333, 'Name': 'Africa', 'women': 30000}), ('America', {'priority': 4, 'men': 1114444411333L, 'Name': 'USA', 'women': 44430000})]) 
0

사전을 정렬 할 수 없습니다. 사전을 정렬 된 것으로 가져올 수는 없지만 정렬 된 튜플 목록으로 변환 할 수 있습니다. 여기에는 그것을 정렬하는 또 다른 버전이 있습니다.

data={'Africa': {'Name': 'Africa', 
      'men': 33333, 
      'priority': 3, 
      'women': 30000}, 
'America': {'Name': 'USA', 
      'men': 1114444411333L, 
      'priority': 4, 
      'women': 44430000}, 
'Asia': {'Name': 'China', 
      'men': 444433333, 
      'priority': 2, 
      'women': 444430000}, 
'Europe': {'Name': 'UK', 
      'men': 11111333, 
      'priority': 1, 
      'women': 1111430000}} 


from operator import itemgetter 
listOfTuple = sorted(data.items(), key= lambda(k,v):itemgetter(1)('priority')) 
listOfTuple.sort(key=lambda tup:tup[1]['priority']) 

print listOfTuple 


>>>[('Europe', {'priority': 1, 'men': 11111333, 'Name': 'UK', 'women': 1111430000}), ('Asia', {'priority': 2, 'men': 444433333, 'Name': 'China', 'women': 444430000}), ('Africa', {'priority': 3, 'men': 33333, 'Name': 'Africa', 'women': 30000}), ('America', {'priority': 4, 'men': 1114444411333L, 'Name': 'USA', 'women': 44430000})]