繁体   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