gpt4 book ai didi

Python3 升序降序排序

转载 作者:太空宇宙 更新时间:2023-11-04 01:10:47 26 4
gpt4 key购买 nike

假设我有以下 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com