我有项目列表,我想按其子列表排序.我希望这样做时不修改原始列表,而只进行排序.
列表可能如下所示:
[
("item A", dataA, [("sort 1a", 0.37), ("sort 2a", 0.11)], dataB, dataC),
(
"item B",
dataA,
[
("sort 1b", 0.37),
("sort 2b", 0.66),
("sort 3b", 0.85),
("sort 4b", 0.63),
("sort 5b", 0.26),
],
dataB,
dataC,
),
(
"item C",
dataA,
[("sort1c", 0.37), ("sort 2c", 0.15), ("sort 3c", 0.60)],
dataB,
dataC,
),
(
"item D",
dataA,
[
("sort 1d", 0.37),
("sort 2d", 0.66),
("sort 3d", 0.85),
("sort 4d", 0.63),
("sort 5d", 0.8),
],
dataB,
dataC,
),
]
我想首先按"排序1"后面的数字排序,然后(其中排序1等于)按"排序2"(如果存在),然后(其中排序1和排序2等于)按"排序3"(如果存在)等等.
这将产生如下列表:
[
("item A", dataA, [("sort 1a", 0.37), ("sort 2a", 0.11)], dataB, dataC),
(
"item C",
dataA,
[("sort1c", 0.37), ("sort 2c", 0.15), ("sort 3c", 0.60)],
dataB,
dataC,
),
(
"item B",
dataA,
[
("sort 1b", 0.37),
("sort 2b", 0.66),
("sort 3b", 0.85),
("sort 4b", 0.63),
("sort 5b", 0.26),
],
dataB,
dataC,
),
(
"item D",
dataA,
[
("sort 1d", 0.37),
("sort 2d", 0.66),
("sort 3d", 0.85),
("sort 4d", 0.63),
("sort 5d", 0.8),
],
dataB,
dataC,
),
]
我try 过一些方法,比如取排序子列表的最大长度,然后递增i
,然后使用key=lambda x: x[2][i][1]
进行排序,直到i > length
.但这只会产生索引错误,因为索引在较短的子列表上失败.
我也try 过使用key=lambda x: (x[2][i][1] not in x, x.get(x[2][i][1], None)
,但只在字典上获得作品.
感谢您的帮助!