簡體   English   中英

元組列表排序

[英]Sort list of tuple

我需要 to_sort 中的第一個縮寫(如“VBM”)與 sort_list 中的順序相同


to_sort = [['SSW', 'Sergey Sirotkin', 'WILLIAMS MERCEDES'], ['SVF', 'Sebastian Vettel', 'FERRARI'], ['SVM', 'Stoffel Vandoorne', 'MCLAREN RENAULT'], ['VBM', 'Valtteri Bottas', 'MERCEDES']]

sort_list = [('VBM', '1:12.433'), ('SSW', 'Error time'), ('SVM', '1:12.463'), ('SVF', '1:44.414')]

example = [['VBM', 'Valtteri Bottas', 'MERCEDES'], ['SSW', 'Sergey Sirotkin', 'WILLIAMS MERCEDES'], ['SVM', 'Stoffel Vandoorne', 'MCLAREN RENAULT'], ['SVF', 'Sebastian Vettel', 'FERRARI']]

一種解決方案是創建映射,其中鍵是縮寫,值是這些鍵的位置:

mapping = {v: idx for idx, (v, _) in enumerate(sort_list)}

out = sorted(to_sort, key=lambda x: mapping[x[0]])
print(out)

印刷:

[
    ["VBM", "Valtteri Bottas", "MERCEDES"],
    ["SSW", "Sergey Sirotkin", "WILLIAMS MERCEDES"],
    ["SVM", "Stoffel Vandoorne", "MCLAREN RENAULT"],
    ["SVF", "Sebastian Vettel", "FERRARI"],
]

備選方案(無映射):

out = sorted(
    to_sort,
    key=lambda i: next(
        idx for idx, (v, _) in enumerate(sort_list) if v == i[0]
    ),
)
print(out)

您可以生成sort_list的第一項列表並調用list.index()以獲取元素的索引(如評論中所建議)

to_sort.sort(key=lambda x, l=[i for i, _ in sort_list]: l.index(x[0]))

基准測試結果:

sort_olvin 0.2418229230097495
sort_olvin_inline 0.22788053899421357
sort_andrej_1 0.2182700579869561
sort_andrej_1_inline 0.19632228900445625
sort_andrej_2 0.5893592859792989
sort_andrej_2_inline 0.5593071450130083

@AndrejKesely在他的回答中提供的第一個選項是最快的,所以我建議您使用它,但是(如果不需要保留原始列表)使用內聯list.sort()會更快一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM