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

如何在Python 3.6.4中按列表首元素为键合并多列表?

针对你的列表合并需求的几种Python解决方案

嘿,针对你这个用Python3.6.4合并相同键子列表的需求,我整理了几个实用的方法,刚好适配你说的“相同键最多对应2个子列表”的场景:

方法1:用字典收集(最直观,适合你的限定场景)

字典是处理这种键值分组问题的利器,逻辑简单易懂,而且Python3.6.4里的字典已经是插入有序的(虽然官方在3.7才正式标准化,但CPython的3.6实现已经支持),所以最终结果的顺序会和原列表里键首次出现的顺序一致:

original_list = [[1, 100], [1, 250], [2, 340], [2, 5200]]
result_dict = {}

for item in original_list:
    key = item[0]
    val = item[1]
    if key in result_dict:
        # 已经有对应键的列表,直接追加值
        result_dict[key].append(val)
    else:
        # 第一次遇到该键,初始化列表(先放键本身)
        result_dict[key] = [key, val]

# 把字典的值转成列表就是最终结果
merged_list = list(result_dict.values())
print(merged_list)  # 输出: [[1, 100, 250], [2, 340, 5200]]

方法2:用itertools.groupby(通用型,支持更多子列表的情况)

如果以后你的需求扩展,相同键可能对应更多子列表,itertools.groupby会更通用。不过要注意,groupby要求输入列表是按键排序的,你的原列表已经符合这个条件,直接用就行:

from itertools import groupby

original_list = [[1, 100], [1, 250], [2, 340], [2, 5200]]
merged_list = []

# 按子列表的第一个元素作为分组键
for key, group in groupby(original_list, key=lambda x: x[0]):
    # 把键和组内所有子列表的第二个元素合并成新列表
    merged_item = [key] + [sub_item[1] for sub_item in group]
    merged_list.append(merged_item)

print(merged_list)  # 输出: [[1, 100, 250], [2, 340, 5200]]

要是原列表没排序,先加一行original_list.sort(key=lambda x: x[0])就行。

方法3:简洁版字典写法(一行循环搞定)

如果你喜欢更紧凑的代码,用dict.setdefault可以简化逻辑:

original_list = [[1, 100], [1, 250], [2, 340], [2, 5200]]
result_dict = {}
for k, v in original_list:
    # 不存在键就初始化[ k ],存在就直接追加v
    result_dict.setdefault(k, [k]).append(v)
merged_list = list(result_dict.values())
print(merged_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:16:45