2016-03-03 32 views
0

鉴于以下字典:排序字典中的值具有转换功能

a = {'foo': {'n': 'one', 'text': 'bla'}, 
    'bar': {'n': 'two', 'text': 'blah'}, 
    'baz': {'n': 'three', 'text': 'blabla'}} 

我想这是由值n排序的结果列表:

['foo', 'bar', 'baz'] 

因为在n的值恒定和已知(所有这些)。因此,为了举例,只有one,twothreen中的允许值。

我认为这必须是在a.items()sorted()一些组合与变换lambda函数替换one 1等,使排序功能的实际工作。但我似乎无法将它串在一起,使其工作。

+0

'排序(a.keys(),拉姆达×:[X] [ 'N'])' – thkang

+0

@BhargavRao你没看第二句?我想将字典中的值排序成列表。你可以对任何东西进行排序,这与字典无关。 – mart1n

+1

@thkang这似乎不起作用,它也会按字母顺序排列'n'中的值。 – mart1n

回答

5

至于你提到因为在正的值是恒定且已知,你可以使用一个mapping_dict。诀窍是你需要映射给定集的每个值在字典中。因此,一旦准备好映射器,使用参数函数key,可以使用它来映射答案。

>>> a = {'foo': {'n': 'one', 'text': 'bla'}, 
...  'bar': {'n': 'two', 'text': 'blah'}, 
...  'baz': {'n': 'three', 'text': 'blabla'}} 
>>> mapping_dict = {'one':1,'two':2,'three':3} 
>>> sorted(a.keys(),key = lambda x: mapping_dict[a[x]['n']]) 
['foo', 'bar', 'baz'] 
2

不知道我理解,但

a = {'foo': {'n': 'one', 'text': 'bla'}, 
    'bar': {'n': 'two', 'text': 'blah'}, 
    'baz': {'n': 'three', 'text': 'blabla'}} 


order = ['three', 'one', 'two'] 

r = sorted(a, key=lambda k: order.index(a[k]['n'])) 
+0

我觉得'订单'列表索引不正确 – Arman

+0

这也是一个很好的解决方案。谢谢! – mart1n