我正在尝试对元组列表进行排序。 例如,如果
>>>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/