python - 对元组列表的一部分进行排序

标签 python python-3.x

我有一个这样的列表名称、重量、高度:

list1 = [('jacob', 75, 180)
         ('sam', 90, 190)
         ('sara', 75, 175)
         ('bob', 60, 175)]

首先我想按高度(最大到最小)对它进行排序,我已经做到了。 然后,如果高度相同,则只需按重量(MIN 到 MAX)对高度相同的那些进行排序。

我明白了:

list1 = [('sam', 190, 90)
         ('jacob', 180, 75)
         ('sara', 175, 75)
         ('bob', 175, 60)]

但我想要这个:

my_list = [('sam', 190, 90),
           ('jacob', 180, 75),
           ('bob', 175, 60),
           ('sara', 175, 75)]

最佳答案

假设您实际上并不介意顺序(出于某种原因您在输出中更改了它),您可以使用 sortedkey,通过使用一个负号,你可以强制给定列表元素的顺序是升序的:

sorted(list1, key=lambda x: (-x[2], x[1]))

[('mahdi', 90, 190),
 ('amin', 75, 180),
 ('ahmad', 60, 175),
 ('mohamad', 75, 175)]

否则只需使用列表推导式重新排列元组:

[(i,k,j) for i,j,k in sorted(list1, key=lambda x: (-x[2], x[1]))]

[('mahdi', 190, 90),
 ('amin', 180, 75),
 ('ahmad', 175, 60),
 ('mohamad', 175, 75)]

关于python - 对元组列表的一部分进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977452/

相关文章:

python - 如何使变量专属于类?

python - pandas df.size 和 len(df.to_dict ("records")) 之间的不同值

python-3.x - 如何在 Spyder 3.5 中运行当前行( ctrl +f10 不起作用)

python - 为 Travis 构建同时安装 Python 和 R?

python - 如何将嵌套的数字列表转换为字符串列表?

python - 如何找出python模块拥有的方法、属性等

python - 如何在解释器中测试包含空行的python代码

python - 根据条件将 numpy 数组值设置为 NaN

python - 我们什么时候应该实现 `__deepcopy__` ?

python - mock.call_count 的线程安全版本