Python - 如何按每个列表中的第四个元素对列表列表进行排序?

Dan*_*ray 95 python sorting list

我想按照每个列表中的第四个元素(整数)对以下列表列表进行排序.

unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?谢谢!

Tay*_*mon 163

unsorted_list.sort(key=lambda x: x[3])
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,在这种方法中,整数是按字典顺序进行比较的.因此,''5'将大于''20'.如果要进行整数比较,则应使用`key = lambda x:int(x [3])` (68认同)
  • 你也可以在这里使用`key = itemgetter(3)`(来自[`operator`](http://docs.python.org/3.3/library/operator.html#operator.itemgetter)模块).虽然有些人发现`itemgetter`和`attrgetter`的可读性低于lambdas,但其他人则广泛使用它们,因此至少值得阅读它们并知道它们的作用. (11认同)
  • 要以降序排序,请添加`reverse = True`作为参数。 (2认同)

Suk*_*lra 52

使用sorted()具有key如下-

>>> unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']]
>>> sorted(unsorted_list, key = lambda x: int(x[3]))
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']]
Run Code Online (Sandbox Code Playgroud)

所述lambda返回每个内列出的和的第四个元素sorted函数使用排序那些列表.这假设int(elem)列表不会失败.

或者使用itemgetter(正如Ashwini的评论所指出的,如果你有数字的字符串表示,这种方法将不起作用,因为它们必然会在2位数的数字处失败)

>>> from operator import itemgetter
>>> sorted(unsorted_list, key = itemgetter(3))
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']]
Run Code Online (Sandbox Code Playgroud)