tup的python排序列表

2024-06-25 06:15:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在整理元组列表。 例如,如果

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

我想得到

^{pr2}$

我就是这么做的:

这个密码只给我

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

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


Tags: 密码列表排序整理元组lukerecommendationstucker
3条回答

首先,听起来你想这么做:

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

对吗?我想这就是问题所在。在

我将向您展示我将如何做,而不是进入您的代码(当我运行它时,只返回其中一个(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

这将打印:

^{pr2}$

这就是你要找的吗?在我的例子中,“曼尼”在“卡梅隆”之前得到了排序(不像你想要的答案),但是如果他们得到相同的分数,我希望这对你来说不重要。(如果有,请澄清您的问题)

像我这样的老前辈可能会把它称为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

如果您愿意的话,欢迎您将此函数转换为函数。在

干杯!在

我在分类主题上的变体。我喜欢使用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
>>> 

您可以将密钥传入排序:

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

然后取名字:

^{pr2}$

如果您注意到了,Manny Delgado和Cameron Tucker是根据他们的键(1)并列的,但是Manny Delgado在Cameron Tucker之前,因为python排序是到位的。但是,根据所需的输出,您希望使用辅助键(本例中的名称)来解析主键中的ties。您可以先按名称排序,然后按主整数键排序:

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

请注意,卡梅隆·塔克现在在曼尼·德尔加多之前。所有这些以及更多的细节都在优秀的Sorting Howto中详细介绍

相关问题 更多 >