タプルのタプルのタプルがあり、最初に 2 番目の要素で並べ替え、次に最下層の 3 番目の要素で並べ替え、中間層の各タプルに対してこれを繰り返し実行します。
たとえば、次のリストを並べ替えたいとします。
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]))
これは無効な構文であり、これをどのように記述するのが正しいのかよくわかりません。何か案は?この種のことが以前に回答されている場合は、事前にお詫び申し上げますが、考えられるすべてを試して検索しました。