因此,我有一个类似于这样的列表:people_list = [[str name, int numerical value]],其中people_list中有n个列表。有了实际数据,它应该是这样的:people_list = [['jim', 30000], ['james', 30000]]。我需要首先根据每个嵌套列表中的数值对这个列表进行排序,因此根据people_list[i][1]排序,其中i是第n个嵌套列表,整个people_list needs将从最高到最低的数值排序。然后,如果数值中有任何关联,我需要根据名称按字母顺序对绑定列表进行排序,因此people_list[i][0]。
我试着对下面的代码进行排序,但是输出并不完全是我所需要的,而且我还没有在网上找到任何其他资源来让它按我需要的方式排序。
people_list = [['jim', 33000], ['james', 22000], ['john', 33000], ['zack', 10000]]
sorted_by_int_then_name = sorted(people_list, key=lambda person: (person[1], person[0]), reverse=True)此代码的输出是:
>>> sorted_by_int_then_name
[['john', 33000], ['jim', 33000], ['james', 22000], ['zack', 10000]]这是正确的排序数字,但名称不是按字母排序,我需要他们是。我认为我遇到的问题可能是因为我使用的是reverse=True参数,但是如果我不包括该参数,那么列表将从最低数值排序到最高值。我想要的输出是:
>>> sorted_by_int_then_name
[['jim', 33000], ['john', 33000], ['james', 22000], ['zack', 10000]]当数值被绑定时,我如何正确地按照people_list[i][1]的数值排序,然后再按people_list[i][0]排序呢?
我在Ubuntu20.04.3LTS上使用python版本3.8.10运行这段代码
发布于 2021-10-14 18:16:13
一种方法是将整数乘成-1,而不是使用reverse=True。
people_array = [['jim', 33000], ['james', 22000], ['john', 33000], ['zack', 10000]]
sorted_by_int_then_name = sorted(people_array, key=lambda person: (-1 * person[1], person[0]))
print(sorted_by_int_then_name)输出
[['jim', 33000], ['john', 33000], ['james', 22000], ['zack', 10000]]作为另一种选择,并利用已排序是稳定这一事实,使用两次传递排序:
from operator import itemgetter
people_array = [['jim', 33000], ['james', 22000], ['john', 33000], ['zack', 10000]]
sorted_by_int_then_name = sorted(people_array, key=itemgetter(0))
sorted_by_int_then_name.sort(key=itemgetter(1), reverse=True)
print(sorted_by_int_then_name)输出
[['jim', 33000], ['john', 33000], ['james', 22000], ['zack', 10000]]两次传递排序可能更快,请参见这。
https://stackoverflow.com/questions/69575521
复制相似问题