Python 如何按多个元素对词典列表进行排序
此线程非常清楚地解释了如何对字典列表进行排序。总之Python 如何按多个元素对词典列表进行排序,python,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
[{'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'}]
您的字符串格式化方法也可以使用,但格式中的位数需要增加,以适应类似的情况。;-)
话虽如此,我还是建议使用元组,因为这样可以更直接地解决问题,效率更高,也不太容易出现编码错误
编辑:根据@JBernardo在评论中的建议,上述内容也可以使用以下措辞:
这对我来说确实有效。是否确实将输入设置为
[{'name':'Homer','age':39},{'name':'Bart','age':10}]
?[虽然我会按元组本身而不是字符串进行排序。更简单,更不容易出错——比如说有一个100岁的老朋友。]Python Wiki上非常好的文档:
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'}]