按python中子列表中的值排序

时间:2011-08-02 06:38:44

标签: python sorting

我的列表包含许多此格式的元素

(23, (12,16,42))

我的基本排序现在默认按子列表中的第一个值排序。

value = sorted(list, key=itemgetter(1))

我想使用描述为http://wiki.python.org/moin/HowTo/Sorting/

的二级排序选项
sorted(student_tuples, key=itemgetter(1,2))

那么子列表中的每个项目都有一个地址吗?我试图找到一些括号或冒号表示法,但我还没想到它。

示例未排序列表

(0, (81.0, 5.0, 83.0)), (1, (81.0, 1.0, 26.0)), (2, (80.0, 1.0, 44.0)), 

输出类似于

(2, (80.0, 1.0, 44.0)), (1, (81.0, 1.0, 26.0)), (0, (81.0, 5.0, 83.0))

(w, (x,y,z))

所以第一种是在x上。如果有多个x值,则按y

对它们进行排序

3 个答案:

答案 0 :(得分:4)

自己定义:

sorted(list, key=lambda item: item[0][1])
# or whatever other sort of indexing you want

在您的情况下,您想要的索引是:

sorted(list, key=lambda item: (item[1][0], item[1][1]))

因为比较元组通过成对比较元素来工作。 key是任何可调用项,可将项目转换为可直接比较的项目,以获得所需的比较结果。

答案 1 :(得分:2)

按多个属性排序的一般方法是使用返回元组的键函数。这是因为Python从左到右对元组进行排序,所以听起来你正试图这样做

>>> L=(0, (81.0, 5.0, 83.0)), (1, (81.0, 1.0, 26.0)), (2, (80.0, 1.0, 44.0)),
>>> sorted(L, key=lambda x:(x[1][0],x[1][1]))
[(2, (80.0, 1.0, 44.0)), (1, (81.0, 1.0, 26.0)), (0, (81.0, 5.0, 83.0))]

由于您要排序的字段的顺序与元组中的顺序相同,因此您可以简化为此

>>> sorted(L, key=lambda x:x[1])
[(2, (80.0, 1.0, 44.0)), (1, (81.0, 1.0, 26.0)), (0, (81.0, 5.0, 83.0))]

让你回到简单

>>> sorted(L, key=itemgetter(1))
[(2, (80.0, 1.0, 44.0)), (1, (81.0, 1.0, 26.0)), (0, (81.0, 5.0, 83.0))]

但希望现在你可以看到为什么 按照你想要的顺序对元素进行排序

答案 2 :(得分:-1)

>>> a = [23, [5, 6, 7]]
>>> a[1][0]
5

子列表是一个项目,因此您使用一组括号来获取该子列表,然后使用另一组括号来索引子列表。