元组的python排序列表

元组的python排序列表,python,list,sorting,tuples,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 Dun

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

>>>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)]

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

您可以将密钥传递给已排序的:

>>> s = sorted(recommendations, key=lambda x: x[1], reverse=True)
[('Luke Dunphy', 3), ('Gloria Pritchett', 2), ('Manny Delgado', 1), ('Cameron Tucker', 1)]
然后获取名称:

names = [x[0] for x in s]
# ['Luke Dunphy', 'Gloria Pritchett', 'Manny Delgado', 'Cameron Tucker']
如果您已经注意到,Manny Delgado和Cameron Tucker根据键(1)并列,但Manny Delgado排在Cameron Tucker之前,因为python排序已经到位。但是,根据所需的输出,您希望使用辅助键(本例中的名称)解析主键中的连接。您可以先按名称排序,然后按主整型键排序:

t = sorted(recommendations, key=lambda x: x[0])
s = sorted(t, key=lambda x: x[1], reverse=True)
# [('Luke Dunphy', 3), ('Gloria Pritchett', 2), ('Cameron Tucker', 1), ('Manny Delgado', 1)]

请注意,卡梅隆·塔克现在排在曼尼·德尔加多之前。优秀的

中详细介绍了所有这些以及更多内容。首先,听起来您想这样做:

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

是这样吗?我想这就是问题所在

我将向您展示如何执行该操作,而不是进入您的代码(当我运行代码时,它只返回(名称、分数)对中的一对)

首先,分步骤进行:

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']
这就是你想要的吗?在我的例子中,“曼尼”排在“卡梅隆”之前(与你的预期答案不同),但如果他们的分数相同,我希望这对你来说并不重要。(如果是,请澄清你的问题)

像我这样的老前辈可能会称之为的变体(我猜我的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
如果您愿意,欢迎您将其转换为函数


干杯!

我的分类主题变体。我喜欢使用itemgetter:

>>> 
>>> from operator import itemgetter
>>> name = itemgetter(0)
>>> score = itemgetter(1)
>>> recommendations = [('Gloria Pritchett', 2), ('Manny Delgado', 1), ('Cameron Tucker', 1), ('Luke Dunphy', 3)]
>>> print '\n'.join(map(name, sorted(recommendations, key = score, reverse = True)))
Luke Dunphy
Gloria Pritchett
Manny Delgado
Cameron Tucker
>>>