如何基于另一列表的元素顺序对元组列表进行排序
完全可以实现,根据你的数据规模可以选择两种不同的实现方案:
方案1:短列表快捷实现
如果你的参考列表l长度很小(少于100个元素),直接用sorted配合list.index即可,写法最简洁:
sorted_tuples = sorted(list_tuples, key=lambda item: l.index(item[0]))
方案2:大数据量高效实现
如果列表长度较大,反复调用list.index会带来额外的遍历开销,你可以预先构建一个元素到索引的映射字典,再用字典查询做排序key,时间复杂度更低:
# 仅遍历参考列表一次,构建排序优先级映射 order_mapping = {value: index for index, value in enumerate(l)} # 排序时直接查询字典获取优先级,效率更高 sorted_tuples = sorted(list_tuples, key=lambda item: order_mapping[item[0]])
完整运行示例
l = ['orange', 'banana', 'apple', 'pear'] list_tuples = [('pear', 1), ('apple', 2), ('orange', 3), ('banana', 4)] order_mapping = {v: i for i, v in enumerate(l)} sorted_tuples = sorted(list_tuples, key=lambda x: order_mapping[x[0]]) print(sorted_tuples) # 输出:[('orange', 3), ('banana', 4), ('apple', 2), ('pear', 1)]
输出结果完全符合你的预期。
内容的提问来源于stack exchange,提问作者pju
相关产品推荐
相关产品推荐

