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

如何用defaultdict将列表的列表转为字典:输出格式不符问题

问题:拆分列表的列表为元素与索引的一一对应键值对

给定列表的列表:

a = [[1,2],[2,3,4], [4,5,6], [3,7], [6,10]]

期望得到每个元素与其所在子列表索引的一一对应关系(注:Python标准字典不支持重复键,以下为需求展示格式):

{1: [0], 2: [0], 2: [1], 3: [1], 4: [1], 4: [2], 5: [2], 6: [2], 3: [3], 7: [3], 6: [4], 10: [4]}

当前使用defaultdict的代码:

from collections import defaultdict

a = [[1,2],[2,3,4], [4,5,6], [3,7], [6,10]]

clusters = defaultdict(list)
cluster_sz = {}

cliques = []
cluster_idx = 0

for clique in a:
       cliques.append(clique)
       for v in clique:
           clusters[v].append(cluster_idx) 
       cluster_idx+=1
print(clusters)

当前输出(合并了相同元素的所有索引):

{1: [0], 2: [0,1], 3: [1,3], 4: [1, 2], 5: [2], 6: [2, 4], 7: [3], 10: [4]}

解决方案

核心说明

Python标准字典不允许存在重复键,因此无法直接生成你描述的"重复键字典"。如果需要保留每个元素与索引的一一对应关系,可通过以下方式实现:

方案1:生成键值对列表

直接遍历每个子列表及其索引,生成包含所有键值对的列表:

a = [[1,2],[2,3,4], [4,5,6], [3,7], [6,10]]
result = []
for idx, clique in enumerate(a):
    for v in clique:
        result.append( (v, [idx]) )

print(result)

输出:

[(1, [0]), (2, [0]), (2, [1]), (3, [1]), (4, [1]), (4, [2]), (5, [2]), (6, [2]), (3, [3]), (7, [3]), (6, [4]), (10, [4])]

方案2:输出类似期望格式的字符串

如果只是需要打印出符合需求展示的格式(非合法Python字典),可以拼接字符串实现:

a = [[1,2],[2,3,4], [4,5,6], [3,7], [6,10]]
output_parts = []
for idx, clique in enumerate(a):
    for v in clique:
        output_parts.append(f"{v}: [{idx}]")

print("{" + ", ".join(output_parts) + "}")

输出:

{1: [0], 2: [0], 2: [1], 3: [1], 4: [1], 4: [2], 5: [2], 6: [2], 3: [3], 7: [3], 6: [4], 10: [4]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39