python中基于int列的元组排序

2024-09-23 22:24:38 发布

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

我有以下元组:

['Southampton', '9', '14', '13']
['Nottingham Forest', '8', '10', '17']
['Coventry City', '7', '4', '14']
['Blackburn Rovers', '4', '6', '14']
['Newcastle United', '24', '20', '10']
['FC Wimbledon', '21', '20', '11']
['Arsenal', '21', '19', '8']

我想按第二列和第三列来排序。所以我使用以下代码:

^{pr2}$

但正如您所见,第2列和第3列不是int,因此排序过程完成错误。我如何才能“告诉”python这些列是int而不是string?在

我试过了但什么也没有:

sorted_rank = sorted(temp_rank, key=itemgetter(1,int(2)), reverse=True)

Tags: city排序unitedint元组fcsortedrank
3条回答
def key_fct(tup):
    return (int(tup[1]), int(tup[2]))

sorted_rank = sorted(temp_rank, key=key_fct, reverse=True)

为了理解为什么您尝试的方法不起作用,让我们确保您理解itemgetter(1, 2)是什么。首先,itemgetter是一个函数。但更重要的是,它是一个返回函数的函数,而返回的函数正是用作排序的关键函数的函数。要了解为什么将字符串转换为int的尝试没有成功,让我们实现一个始终接受两个参数的itemgetter版本:

def itemgetter(i, j):
    def fn(e):
        return (e[i], e[j])
    return fn

用作键的是内部函数fn的返回值。您所做的是将j转换为int,而不是e[j]。为此,必须捕获fn的结果,执行强制转换,然后返回结果:

^{2}$

然后,您可以使用以下方法正确执行排序:

sorted_rank = sorted(temp_rank, key=keyfunc, reverse=True)

必须指定自定义函数或lambda。在

以下工作:

sorted_rank = sorted(temp_rank, key=lambda i: (int(i[1]), int(i[2])), reverse=True)

其中sorted_rank变为:

^{2}$

相关问题 更多 >