这个帖子How do I sort a list of dictionaries by values of the dictionary in 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
我尝试了各种版本但无济于事。
任何帮助表示赞赏,
答案 0 :(得分:4)
只需更改键功能即可返回包含您要排序的元素的元组:
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'}]