Python3 升序降序排序

标签 python list sorting python-3.x

假设我有以下 python 列表(这只是示例):

my_list = [{'user': 'Joe', 'score': 14},
           {'user': 'Foo', 'score': 12},
           {'user': 'May', 'score': 12},
           {'user': 'Kat', 'score': 12},
           {'user': 'Doe', 'score': 13}]

我需要按得分升序和用户名降序对列表进行排序。 预期排序结果:

my_list = [{'user': 'May', 'score': 12},
           {'user': 'Kat', 'score': 12},
           {'user': 'Foo', 'score': 12},
           {'user': 'Doe', 'score': 13},
           {'user': 'Joe', 'score': 14}]

所以,如果我希望所有内容都按升序排列,我可以这样做:

my_list.sort(key=lambda x: (x['score'], x['user']))

对于整数很容易解决这个问题,只需在它前面添加-:

my_list.sort(key=lambda x: (-x['score'], x['user']))

不幸的是,字符串不能为负数:-|

我需要一个不涉及“reverse=True”的通用解决方案。 Lambda 函数是根据用户配置动态生成的。

想法?

最佳答案

如果您设置 list.sortreverse 参数,您当前的解决方案将工作正常为 True:

>>> my_list = [{'user': 'Joe', 'score': 14},
...            {'user': 'Foo', 'score': 12},
...            {'user': 'May', 'score': 12},
...            {'user': 'Kat', 'score': 12},
...            {'user': 'Doe', 'score': 13}]
>>> my_list.sort(key=lambda x: (-x['score'], x['user']), reverse=True)
>>> pprint(my_list) # pprint makes the nice output
[{'score': 12, 'user': 'May'},
 {'score': 12, 'user': 'Kat'},
 {'score': 12, 'user': 'Foo'},
 {'score': 13, 'user': 'Doe'},
 {'score': 14, 'user': 'Joe'}]
>>>

这将以相反的顺序对列表进行排序。


编辑:

由于名称和分数有两种不同的排序顺序,因此您需要使用两种不同的排序来获得所需的输出:

>>> my_list = [{'user': 'Joe', 'score': 14},
...            {'user': 'Foo', 'score': 12},
...            {'user': 'May', 'score': 12},
...            {'user': 'Kat', 'score': 12},
...            {'user': 'Doe', 'score': 13}]
>>> my_list.sort(key=lambda x: x['user'], reverse=True)
>>> my_list.sort(key=lambda x: x['score'])
>>> pprint(my_list)
[{'score': 12, 'user': 'May'},
 {'score': 12, 'user': 'Kat'},
 {'score': 12, 'user': 'Foo'},
 {'score': 13, 'user': 'Doe'},
 {'score': 14, 'user': 'Joe'}]
>>>

关于Python3 升序降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830184/

相关文章:

c# - JSON Newtonsoft C# 序列化/反序列化对象列表的良好实践

python-2.7 .zip 多个生成的列表

python - 如何对 Python 列表进行部分排序?

Python-uinput无法移动鼠标光标

python - 如何从gensim的word2vec中提取词汇向量?

c# - 如何在 ASP.Net MVC C# 中的 Form Post 上绑定(bind) List<T>

javascript - 根据评分对表进行排序

java - 在本地定义数组并将参数传递给其他方法时遇到麻烦

python - 如何用matplotlib绘制水平百分比条形图?

python - 是否可以在 Thread 调用中使用内联函数?