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

如何用Python将单键值字典列表转换为值为集合的字典?

解决方法:将单键字典列表转换为键对应值集合的字典

嘿,这个需求挺常见的,我来给你分享几种实用的Python实现方式,从基础到高效的都有,你可以根据自己的场景选:

首先先明确下示例场景,假设你的原始数据是这样的:

original_list = [
    {"a": 1},
    {"b": 2},
    {"a": 3},
    {"b": 2},
    {"c": 5}
]

我们要得到的结果是:{"a": {1, 3}, "b": {2}, "c": {5}}

方法1:基础循环法(适合新手理解)

这种方式最直观,手动遍历处理每个字典,一步步构建结果:

result = {}
for d in original_list:
    # 取出当前字典唯一的键值对(因为每个字典只有一个键)
    key, value = next(iter(d.items()))
    # 如果键还没在结果里,先初始化空集合
    if key not in result:
        result[key] = set()
    # 把值添加到对应集合里
    result[key].add(value)

这里用next(iter(d.items()))是因为每个字典只有一个键值对,直接取第一个(也是唯一一个)键值对就行,比用list(d.items())[0]更高效,不用生成整个列表。

方法2:用collections.defaultdict简化代码(推荐)

如果不想手动判断键是否存在,可以用Python标准库的defaultdict,它会自动为不存在的键初始化指定类型(这里是set):

from collections import defaultdict

result = defaultdict(set)
for d in original_list:
    key, value = next(iter(d.items()))
    result[key].add(value)

# 如果你需要把结果转成普通的dict(而不是defaultdict),只需一步:
result = dict(result)

这种方式代码更简洁,效率也和基础循环差不多,处理大数据量的时候体验更好。

方法3:一行式字典推导(适合小数据量)

如果追求代码简洁,也可以用字典推导来实现,不过这种方式的效率不如前两种(因为每个键都会遍历整个列表),适合数据量不大的场景:

# 先提取所有唯一的键,再为每个键收集对应的值集合
result = {
    key: {d[key] for d in original_list if key in d}
    for key in {k for d in original_list for k in d}
}

外层的集合推导{k for d in original_list for k in d}用来获取所有不重复的键,内层的集合推导则收集每个键对应的所有值。

注意点

  • 因为集合的特性,重复的值会自动被去重,这正好符合你的需求;
  • 如果你原始字典里有多个键(虽然你说每个只有一个),那next(iter(d.items()))只会取第一个键值对,这时候你可能需要调整逻辑,但按你的需求来说完全没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:38:04