【问题标题】:sorting tuple based on int column in python基于python中的int列对元组进行排序
【发布时间】:2012-11-29 04:23:59
【问题描述】:

我有以下元组:

['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']

我想按第 2 列和第 3 列对其进行排序。所以我使用以下代码:

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

但是你可以看到第 2 列和第 3 列不是 int,所以排序过程完成错误。我如何“告诉”python 这些列是 int 而不是 string?

我试过了,但没有:

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

【问题讨论】:

  • 您可能需要考虑先将所有字符串转换为整数。

标签: python sorting int tuples


【解决方案1】:

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

以下作品:

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

sorted_rank 变成:

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

【讨论】:

    【解决方案2】:
    def key_fct(tup):
        return (int(tup[1]), int(tup[2]))
    
    sorted_rank = sorted(temp_rank, key=key_fct, reverse=True)
    

    【讨论】:

      【解决方案3】:

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

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

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

      def keyfunc(e):
          return tuple(int(x) for x in itemgetter(1, 2)(e))
      

      然后您可以使用它正确执行排序:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        相关资源
        最近更新 更多