2013-05-02 81 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})]