0

我有一个列表, 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我完全不熟悉的功能,所以我不确定如何将其应用于我的问题。

欣赏任何可以给定的方向

谢谢

4

3 回答 3

3

您可以指定一个确定排序顺序的key函数。

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

你说你不熟悉 lambdas。好吧,首先,您可以阅读此内容。然后,我会给你一个瘦身:lambda 是一个匿名函数(除非你将它分配给一个变量 la f = lambda x: x[0]),它采用lambda arguments: expression. 这expression是 lambda 返回的内容。所以这里的 key 函数接受一个参数x, 并返回x[0]

于 2013-07-03T16:50:37.683 回答
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']]
于 2013-07-03T16:49:56.793 回答
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']]
于 2013-07-03T16:52:18.123 回答