如何对以下字典列表进行排序?

3
一个单独的字典包含 3 个 键:值 (key:value) 对,我需要通过比较第一个键来对字典进行排序,如果值相同则比较第二个键,以此类推。 我该怎么做呢?
例如,如果字典列表如下:
lst = [{'a':10,'b':20,'c':30},{'a':20,'b':50,'c':30},{'a':20,'b':40,'c':10},{'a':20,'b':40,'c':30}]

排序后,结果必须如下所示:

[{'a':20,'b':50,'c':30},{'a':20,'b':40,'c':30},{'a':20,'b':40,'c':10},{'a':10,'b':20,'c':30}]

在这里,我们可以看到,在最后3个字典中,键'a'的原始列表值相同,因此我们比较了它们的'b'键并进行了排序,但是最后2个字典的'b'键相同,因此我们比较了'c'键并应用了排序。


3
你的示例中的字典有3个键值对,而不是4个。并且你知道在3.7版本之前,字典是无序的,也就是说,第一个、第二个等键是不明确的,对吗? - buran
2
这可能会对你有所帮助:https://dev59.com/xXVD5IYBdhLWcg3wJIAK?rq=1 - new QOpenGLWidget
1个回答

2
您可以使用sorted函数,将字典的values作为key函数的参数,这样排序将根据每个字典中的所有值进行。
sorted(lst, key=lambda x: list(x.values()), reverse=True)

[{'a': 20, 'b': 50, 'c': 30},
 {'a': 20, 'b': 40, 'c': 30},
 {'a': 20, 'b': 40, 'c': 10},
 {'a': 10, 'b': 20, 'c': 30}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接