使用Python中的子列表的第一个元素对元列表进行排序

时间:2013-07-03 16:47:20

标签: python list sorting python-2.x

我有一个列表,root,列表,root[child0]root[child1]等。

我想按子列表root[child0][0]中的第一个值(int)对根列表的子项进行排序。

示例:

import random
children = 10
root = [[random.randint(0, children), "some value"] for child in range(children)]

我希望通过每个孩子的第一个元素将root从最大到最小排序。

我已经看过一些先前使用sorted()lamda函数的条目我完全不熟悉,因此我不确定如何将其应用于我的问题。< / p>

欣赏任何可以通过给定的方向

由于

3 个答案:

答案 0 :(得分:3)

您可以指定key function来确定排序顺序。

sorted(root, key=lambda x: x[0], reverse=True)

你说你不熟悉lambdas。好吧,首先,you can read this。然后,我会给你一个瘦的:lambda是一个匿名函数(除非你把它分配给变量,la f = lambda x: x[0]),它采用lambda arguments: expression形式。 expression是lambda返回的内容。所以这里的关键函数需要一个参数x,然后返回x[0]

答案 1 :(得分:1)

您可以使用key参数指定要用于比较项目的功能或项目。

key = lambda x : x[0]

或更好:key = operator.itemgetter(0)

或者您也可以根据需要定义自己的功能并将其传递给key

>>> root = [[random.randint(0, children), "some value"] for child in range(children)]
>>> root
[[3, 'some value'], [8, 'some value'], [5, 'some value'], [4, 'some value'], [3, 'some value'], [3, 'some value'], [2, 'some value'], [5, 'some value'], [5, 'some value'], [4, 'some value']]
>>> root.sort(key = lambda x : x[0], reverse = True)
>>> root
[[8, 'some value'], [5, 'some value'], [5, 'some value'], [5, 'some value'], [4, 'some value'], [4, 'some value'], [3, 'some value'], [3, 'some value'], [3, 'some value'], [2, 'some value']]

或使用operator.itemgetter

>>> from operator import itemgetter
>>> root.sort(key = itemgetter(0), reverse = True)
>>> root
[[8, 'some value'], [5, 'some value'], [5, 'some value'], [5, 'some value'], [4, 'some value'], [4, 'some value'], [3, 'some value'], [3, 'some value'], [3, 'some value'], [2, 'some value']]

答案 2 :(得分:0)

这与Python默认排序的方式相反,因此在这种情况下不需要key参数 - 您可以单独使用reverse参数...

>>> import random
>>> import pprint
>>> root = [[random.randint(0, children), "some value"] for child in range(children)]
>>> pprint.pprint(root)
[[0, 'some value'],
 [2, 'some value'],
 [3, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [3, 'some value'],
 [7, 'some value'],
 [7, 'some value'],
 [8, 'some value']]
>>> root.sort(reverse=True)
>>> pprint.pprint(root)
[[8, 'some value'],
 [7, 'some value'],
 [7, 'some value'],
 [3, 'some value'],
 [3, 'some value'],
 [2, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [0, 'some value']]