2013-07-16 153 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'}]