python 对元组列表进行排序

标签 python list sorting tuples

我正在尝试对元组列表进行排序。 例如,如果

>>>recommendations = [('Gloria Pritchett', 2), ('Manny Delgado', 1), ('Cameron Tucker', 1), ('Luke Dunphy', 3)] 

我想要得到

Luke Dunphy
Gloria Pritchett
Cameron Tucker
Manny Delgado

这就是我所做的:

这段代码只给我

>>> [('Luke Dunphy', 3), ('Gloria Pritchett', 2), ('Cameron Tucker', 1), ('Manny Delgado', 1)]

我不知道如何在排序列表中仅附加名称(字符串)。请帮忙!

最佳答案

首先,听起来您想这样做:

给定(名称,分数)元组列表,返回名称列表 从最高分到最低分。

是吗?我假设这就是问题。

我不会进入你的代码(当我运行它时,只返回一对(名称,分数)),而是向你展示我会如何做。

首先分步骤进行:

recommendations = [
  ('Gloria Pritchett', 2), 
  ('Manny Delgado', 1), 
  ('Cameron Tucker', 1), 
  ('Luke Dunphy', 3)]

rec2 = [(age, name) for name, age in recommendations]
print rec2
rec3 = sorted(rec2, reverse=True)
print rec3
rec4 = [name for age, name in rec3]
print rec4

这将打印:

[(2, 'Gloria Pritchett'), (1, 'Manny Delgado'), (1, 'Cameron Tucker'), (3, 'Luke Dunphy')]
[(3, 'Luke Dunphy'), (2, 'Gloria Pritchett'), (1, 'Manny Delgado'), (1, 'Cameron Tucker')]
['Luke Dunphy', 'Gloria Pritchett', 'Manny Delgado', 'Cameron Tucker']

这就是你要找的吗?就我而言,“曼尼”在“卡梅伦”之前排序(与您预期的答案不同),但如果他们得到相同的分数,我希望这对您来说并不重要。 (如果是,请澄清您的问题)

像我这样的老 friend 可能会称之为 Schwartzian transform 的变体。 (我猜我的 Perl 根源正在显现......)

无论如何,它的工作原理如下:

rec2 是一个“列表理解”,分数和名称交换了。

rec3 使用 Python 的内置功能对元组进行排序,但使用 reversed=True 实现从高到低排序。

rec4 是另一个“列表理解”,用于删除分数并返回名称。

如果必须的话,您可以将它们全部放在一个声明中:

class_rank = [name for age, name in sorted([(age, name) for name, age in recommendations], reverse=True)]
print class_rank

如果您愿意,欢迎您将其转换为函数。

干杯!

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

相关文章:

java - List<Object> 和 List 之间的区别

c# Linq 从字典中的列表中过滤掉记录

arrays - 对ArrayController的内容进行排序

c - C程序中出现插入排序错误

python - 如何利用 NumPy 的功能修复和优化这段非常简单的 "Game of Life"代码?

python除法结果与负数不同

python - Tkinter StringVar() 显示空白

python - 素数递归 - 它是如何工作的? (Python)

c++ - 默认参数和变量列表

Bash - 对字符串列表进行排序