2013-05-02 36 views
2

我有一本字典,看起來像這樣字典詞典的:通過挑選特定鍵

{'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}} 

我需要梳理本詞典由Key =優先

我使用的是2.7,並試圖幾選項(不看起來非常優雅)。有什麼建議麼?

+2

你可以添加你現有的代碼,以便我們可以評估Pythonic是怎麼樣的嗎? :) – Talvalin 2013-05-02 10:46:54

+0

您的示例意味着每個字典鍵都只有一個字典作爲其值。真的嗎? – JosefAssad 2013-05-02 12:48:20

回答

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

這是不可能的排序dict.You不能得到一本字典的排序,但你可以將其轉換爲有序元組列表。這是對它進行排序的另一個版本;

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})]