【问题标题】:python: sort a list of lists by an item in the sublist [duplicate]python:按子列表中的项目对列表列表进行排序[重复]
【发布时间】:2013-08-11 02:44:27
【问题描述】:

我有一个包含用户和分数的列表,如下所示:

[["user1", 100], ["user2", 234], ["user3", 131]...]

我想生成一个按分数降序对用户进行排序的列表:

[["user2", 234], ["user3", 131], ["user1", 100]...]

我该如何进行这种排序?

【问题讨论】:

    标签: python list sorting


    【解决方案1】:
    >>> li = [["user1", 100], ["user2", 234], ["user3", 131]]
    >>> 
    >>> import operator
    >>> 
    >>> sorted(li, key=operator.itemgetter(1))   # Ascending order
    [['user1', 100], ['user3', 131], ['user2', 234]]
    
    >>> sorted(li, key=operator.itemgetter(1), reverse=True)  # Reverse Sort
    [['user2', 234], ['user3', 131], ['user1', 100]]
    

    【讨论】:

      【解决方案2】:

      您可以通过传递键和反向来自定义排序行为。 sorted 将返回一个新列表。如果需要就地排序,请使用list.sort

      >>> a = [["user1", 100], ["user2", 234], ["user3", 131]]
      >>> sorted(a, key=lambda x: x[1], reverse=True)
      [['user2', 234], ['user3', 131], ['user1', 100]]
      

      【讨论】:

        【解决方案3】:

        sorted 接受可选的key 函数和反向参数。

        >>> sorted([["user1", 100], ["user2", 234], ["user3", 131]], key=lambda x: x[1], reverse=True)
        [['user2', 234], ['user3', 131], ['user1', 100]]
        

        【讨论】:

          【解决方案4】:
          l = [["user1", 100], ["user2", 234], ["user3", 131]]
          l.sort(lambda x, y: x[1])
          

          【讨论】:

            猜你喜欢
            • 2015-06-27
            • 1970-01-01
            • 2015-11-14
            • 1970-01-01
            • 2014-05-28
            • 1970-01-01
            • 1970-01-01
            • 2015-09-21
            • 2011-04-09
            相关资源
            最近更新 更多