我有一个列表,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>
欣赏任何可以通过给定的方向
由于
答案 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']]