簡體   English   中英

如何按多個元素對字典列表進行排序

[英]How do I sort a list of dictionaries by more than one element

此線程如何按Python中字典的值對字典列表進行排序? 非常清楚地解釋了如何對字典列表進行排序。 總結一下,

[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]

你做:

newlist = sorted(list_to_be_sorted, key=lambda k: k['name']) 

但是,我的字典中有更多的元素,我需要按其中的四個來排序 - 而不僅僅是一個。 任何提示如何做到這一點?

注意:我進一步閱讀了線程和這個建議:

sortedlist = sorted(input, key=lambda elem: "%02d %s" % (elem['age'], elem['name']))

不起作用。 它給出了錯誤:

TypeError: list indices must be intergers, not str

我嘗試了各種版本但無濟於事。

任何幫助,贊賞,

只需更改鍵功能即可返回包含您要排序的元素的元組:

newlist = sorted(input, key=lambda k: (k['age'], k['name'])) 

例如:

In [13]: input = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}, {'name':'Milhouse', 'age':10}, {'name': 'Mr. Burns', 'age': 104}]

In [14]: sorted(input, key=lambda k: (k['age'], k['name']))
Out[14]: 
[{'age': 10, 'name': 'Bart'},
 {'age': 10, 'name': 'Milhouse'},
 {'age': 39, 'name': 'Homer'},
 {'age': 104, 'name': 'Mr. Burns'}]

您的字符串格式化方法也可以使用,但需要增加格式中的位數以適應Cornelius Chapman等 ;-)

話雖如此,我建議使用元組,因為這可以更直接地解決問題,更有效並且不易出現編碼錯誤。

編輯:正如@JBernardo在評論中所建議的,上面也可以使用operator.itemgetter()來表達:

In [19]: sorted(input, key=operator.itemgetter('age','name'))
Out[19]: 
[{'age': 10, 'name': 'Bart'},
 {'age': 10, 'name': 'Milhouse'},
 {'age': 39, 'name': 'Homer'},
 {'age': 104, 'name': 'Mr. Burns'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM