我有一个元组元组的元组,我想首先按第二个元素对其进行排序,然后是最下层的第一个,然后是第三个,并为中间层的每个元组迭代地执行此操作。
例如,我想对以下列表进行排序:
sampleToBeSorted = (
(('D', 52, 'B'), ('D', 32, 'B')),
(('D', 31, 'A'), ('D', 52, 'B')),
(('A', 31, 'B'), ('D', 32, 'B')),
(('C', 31, 'A'), ('B', 24, 'C'), ('C', 33, 'B')),
(('D', 31, 'A'), ('D', 32, 'B'), ('C', 29, 'B'), ('D', 216, 'C')),
(('D', 40, 'B'), ('A', 32, 'C')),
)
这样它看起来像这样:
sampleToBeSorted = (
((‘A’, 31, ‘B’), (‘D’, 32, ‘B’)),
((‘C’, 31, ‘A’), (‘B’, 24, ‘C’), (‘C’, 33, ‘B’)),
((‘D’, 31, ‘A’), (‘D’, 32, ‘B’), (‘C’, 29, ‘B’), (‘D’, 216, ‘C’)),
((‘D’, 31, ‘A’), (‘D’, 52, ‘B’)),
((‘D’, 40, ‘B’), (‘A’, 32, ‘C’)),
((‘D’, 52, ‘B’), (‘D’, 32, ‘B’)),
)
我已经到了那里,使用:
sortedSample = sorted(sampleToBeSorted, key= lambda x:(x[0][1],x[0][0],x[0][2]))
但这仅对中间层的第一个元组进行排序。为了让它对中间层中的所有元组迭代地执行此操作,我想我可以将其修改为类似
sortedSample = sorted(sampleToBeSorted, key= lambda x:(x[i][1],x[i][0],x[i][2]) for i in range(len(sampleToBeSorted[x]))
这是无效的语法,我不太清楚写这个的正确方法是什么。有任何想法吗?如果以前已经回答过这类问题,我提前道歉,但我已经尝试并搜索了我能想到的一切。