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

如何将嵌套列表合并为以其首元素为键的字典?

当然可以轻松实现!这里有几种不同的方法,你可以根据自己的需求选择:

方法1:基础循环遍历(直观易懂)

这个方法适合刚接触Python的朋友,逻辑清晰,一步步来:

l = [['A', '1'], ['A', '2'], ['B', '1'], ['C', '1'], ['C', '2']]
d = {}

for key, value in l:
    if key not in d:
        d[key] = []
    d[key].append(value)

print(d)  # 输出: {'A': ['1', '2'], 'B': ['1'], 'C': ['1', '2']}

思路很简单:先初始化一个空字典,然后逐个处理每个子列表。如果键不在字典里,就先创建一个空列表作为它的值;如果键已经存在,就把对应的value追加到列表里。

方法2:使用collections.defaultdict(更简洁)

Python的collections模块里的defaultdict能帮我们省去判断键是否存在的步骤,它会自动为不存在的键创建默认值(这里我们指定默认值为列表):

from collections import defaultdict

l = [['A', '1'], ['A', '2'], ['B', '1'], ['C', '1'], ['C', '2']]
d = defaultdict(list)

for key, value in l:
    d[key].append(value)

# 如果需要转成普通字典(可选操作)
d = dict(d)

print(d)  # 输出: {'A': ['1', '2'], 'B': ['1'], 'C': ['1', '2']}

这种写法更简洁,代码量更少,是日常开发中比较常用的方案。

方法3:使用itertools.groupby(适合已排序的场景)

如果你的列表已经按照第一个元素(键)排好序,或者你不介意先排序的话,可以用itertools.groupby来实现:

from itertools import groupby

l = [['A', '1'], ['A', '2'], ['B', '1'], ['C', '1'], ['C', '2']]
# 注意:groupby要求连续相同的键才能分组,所以必须先按键排序
sorted_l = sorted(l, key=lambda x: x[0])

d = {key: [item[1] for item in group] for key, group in groupby(sorted_l, key=lambda x: x[0])}

print(d)  # 输出: {'A': ['1', '2'], 'B': ['1'], 'C': ['1', '2']}

这种方法用了字典推导式,看起来很优雅,但一定要记得先排序——如果原列表里的键不连续,会被分成多个独立的组,导致结果不符合预期。

总结

  • 追求逻辑直观、不想引入额外模块?选方法1;
  • 想写更简洁的代码?选方法2;
  • 列表已经排序,或者需要排序后的结果?选方法3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:17:33