我的列表包含许多此格式的元素
(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
对它们进行排序答案 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
子列表是一个项目,因此您使用一组括号来获取该子列表,然后使用另一组括号来索引子列表。