You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按list1的名称顺序对list2排序?两列表含相同名称元素

把list2排序成和list1名称一致的顺序

这事儿好办,给你两种灵活的实现方式,不管list2初始顺序怎么乱,只要名称和list1完全匹配,就能精准对齐:

方法一:字典映射法(高效首选)

先从list1里生成一个名称到索引的字典,这样就能快速定位每个名称在list1中的位置,然后用这个位置作为排序依据来整理list2。代码示例:

list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]]
list2 = [ ["name2", 1], ["name1", -1], ["name3", 0]]

# 构建名称到list1索引的映射字典
name_position = {name: idx for idx, (name, _) in enumerate(list1)}

# 按照list1的顺序排序list2
sorted_list2 = sorted(list2, key=lambda item: name_position[item[0]])

print(sorted_list2)
# 输出结果:[["name1", -1], ["name2", 1], ["name3", 0]]

这种方法的好处是效率高,构建字典是O(n)时间,排序是O(n log n),哪怕列表元素再多(远超过20个)也能稳定运行;而且逻辑清晰,别人看代码也能一眼明白是按list1的顺序来排的。

方法二:直接利用名称序列(代码更简洁)

如果觉得字典有点麻烦,也可以直接提取list1的名称列表,用index()方法获取每个名称的位置来排序:

list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]]
list2 = [ ["name2", 1], ["name1", -1], ["name3", 0]]

# 提取list1的名称顺序
name_order = [name for name, _ in list1]

# 按名称在name_order中的位置排序
sorted_list2 = sorted(list2, key=lambda item: name_order.index(item[0]))

print(sorted_list2)
# 输出和上面完全一致

这种写法更简洁,但要注意:index()每次查找是O(n)时间,所以整体时间复杂度是O(n²)。不过你的场景里最多20个元素,这点性能差异完全可以忽略,怎么顺手怎么来就行。

两种方法都能完美满足你的需求,根据自己的习惯选就好啦~

内容的提问来源于stack exchange,提问作者FlugtN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:39:41