按字典中的多个键对字典列表进行排序

moh*_*eem 3 python sorting dictionary list python-3.x

我有list一个dictionary

data = [{'name' : 'messi', 'place': 'barcelona'}, {'name': 'salah', 'place': 'liverpool'}, 
        {'name': 'neymar', 'place': 'paris'}, {'name': 'suarez', 'place': 'barcelona'}]
Run Code Online (Sandbox Code Playgroud)

keys我想按多个位置升序对这个字典列表进行排序,并按降序对名称进行排序

我知道如何对具有多个字段的字典列表进行排序,均为升序

sorted(data, key=lambda x: (x['name'], x['place']))
Run Code Online (Sandbox Code Playgroud)

但我不确定如何实现一个字段的升序和另一个字段的降序(两者都是str类型)

Nic*_*ick 6

您需要排序两次,首先按name降序排序,然后按place升序排序,依赖于 python 排序是稳定的事实,因此如果两个条目具有相同的place值,则它们的顺序将在第二次排序中保留(因此name将保持降序排序):

sorted(sorted(data, key=lambda x: x['name'], reverse=True), key=lambda x: x['place'])
Run Code Online (Sandbox Code Playgroud)

输出

[
 {'name': 'suarez', 'place': 'barcelona'},
 {'name': 'messi', 'place': 'barcelona'},
 {'name': 'salah', 'place': 'liverpool'},
 {'name': 'neymar', 'place': 'paris'}
]
Run Code Online (Sandbox Code Playgroud)