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

如何合并字典相同键的列表值并对重复元素去重

首先,Python 原生字典不允许重复键,你示例中给出的data如果直接定义,后面的重复键会覆盖前面的,最终每个键只会保留最后一次赋值的列表。因此需要先将原始数据调整为支持重复键的存储格式,最通用的是转为键值元组组成的列表。

以下是可实现需求的具体方案:

方案1:基础字典实现(无额外依赖)

该方案可以保留列表元素的首次出现顺序,不需要导入任何三方库:

# 先将原始重复键数据转为元组列表格式
raw_data = [
    ("test1", ["data1", "data2"]),
    ("test1", ["data3", "data4", "data2"]),
    ("test2", ["1data", "2data"]),
    ("test2", ["3data", "4data", "2data"])
]

result = {}
for key, val_list in raw_data:
    if key not in result:
        result[key] = []
    for item in val_list:
        if item not in result[key]:
            result[key].append(item)

print(result)
# 输出:{'test1': ['data1', 'data2', 'data3', 'data4'], 'test2': ['1data', '2data', '3data', '4data']}

方案2:用defaultdict简化代码

使用Python标准库的collections.defaultdict可以省去判断键是否存在的步骤,代码更简洁:

from collections import defaultdict

raw_data = [
    ("test1", ["data1", "data2"]),
    ("test1", ["data3", "data4", "data2"]),
    ("test2", ["1data", "2data"]),
    ("test2", ["3data", "4data", "2data"])
]

result = defaultdict(list)
for key, val_list in raw_data:
    for item in val_list:
        if item not in result[key]:
            result[key].append(item)

# 按需转为普通字典
result = dict(result)
print(result)

方案3:集合去重(适合大数据量场景)

如果不需要严格保留列表元素的出现顺序,用集合去重的效率更高,尤其数据量较大时优势明显:

from collections import defaultdict

raw_data = [
    ("test1", ["data1", "data2"]),
    ("test1", ["data3", "data4", "data2"]),
    ("test2", ["1data", "2data"]),
    ("test2", ["3data", "4data", "2data"])
]

result = defaultdict(set)
for key, val_list in raw_data:
    result[key].update(val_list)

# 将集合转为列表,需要顺序的话可自行添加排序逻辑
result = {k: list(v) for k, v in result.items()}
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:03