Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按多个元素对词典列表进行排序_Python - Fatal编程技术网

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'}]