2013-07-16 154 views
2

我有一个这样的名单:如何对此列表进行排序?

li = [ 
    { 
    'name': 'Lee', 
    'age': 22 
    }, 
    { 
    'name': 'Mike', 
    'age': 34 
    }, 
    { 
    'name': 'John', 
    'age': 23 
    } 
] 

我想用排序法sorted列表,和排序的age关键

如何实现的呢?

+0

碰巧的是'如果你让sorted'会做到这一点含蓄它使用它的默认值。 – kojiro

+0

@kojiro:我们可能不应该依赖这一点。请参阅Python 2.7文档的[本节](http://docs.python.org/2.7/reference/expressions.html#not-in);在Python 3中,比较失败并伴有TypeError。 – DSM

回答

8

使用key function

li_sorted = sorted(li, key=lambda x: x['age']) 
+0

Ahhhhh ...可怕的L字! (Jk,+1) – 6502

1

的Python3相当于@kojiro表明这是什么

>>> sorted(li, key=lambda x:sorted(x.items())) 
[{'age': 22, 'name': 'Lee'}, {'age': 23, 'name': 'John'}, {'age': 34, 'name': 'Mike'}] 

显然,这是比

>>> sorted(li, key=lambda x:x['age']) 
[{'age': 22, 'name': 'Lee'}, {'age': 23, 'name': 'John'}, {'age': 34, 'name': 'Mike'}] 

反正效率较低。还有,它不依赖于一个事实,即'age' < 'name'

这里是如何写使用同样的事情的优势itemgetter

>>> from operator import itemgetter 
>>> sorted(li, key=itemgetter('age')) 
[{'age': 22, 'name': 'Lee'}, {'age': 23, 'name': 'John'}, {'age': 34, 'name': 'Mike'}]