首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有用于根据嵌套数组中的两个元素对2D数组进行排序的python函数?

问是否有用于根据嵌套数组中的两个元素对2D数组进行排序的python函数?
EN

Stack Overflow用户
提问于 2021-10-14 18:14:40
回答 1查看 46关注 0票数 1

因此,我有一个类似于这样的列表: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]。

我试着对下面的代码进行排序,但是输出并不完全是我所需要的,而且我还没有在网上找到任何其他资源来让它按我需要的方式排序。

代码语言:javascript
复制
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)

此代码的输出是:

代码语言:javascript
复制
>>> sorted_by_int_then_name
[['john', 33000], ['jim', 33000], ['james', 22000], ['zack', 10000]]

这是正确的排序数字,但名称不是按字母排序,我需要他们是。我认为我遇到的问题可能是因为我使用的是reverse=True参数,但是如果我不包括该参数,那么列表将从最低数值排序到最高值。我想要的输出是:

代码语言:javascript
复制
>>> 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运行这段代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 18:16:13

一种方法是将整数乘成-1,而不是使用reverse=True。

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
[['jim', 33000], ['john', 33000], ['james', 22000], ['zack', 10000]]

作为另一种选择,并利用已排序是稳定这一事实,使用两次传递排序:

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
[['jim', 33000], ['john', 33000], ['james', 22000], ['zack', 10000]]

两次传递排序可能更快,请参见这。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69575521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档