[英]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.