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

Python字典格式转换:嵌套字典转元组列表技术求助

把邻接表字典转换为三元组列表的正确解法

首先得说,你当前的代码逻辑完全走反了——你现在是在尝试往字典里添加新条目,但我们的需求是把字典拆成三元组列表,而且代码里还有未定义的变量(比如i、dict1),直接跑肯定会报错。

先理清楚核心需求:遍历原字典的每个键(起点节点),然后对每个键对应的每个元组(终点节点+权重),把起点、终点、权重拼接成一个新的三元组,最后把所有三元组收集到列表里。

方法一:基础for循环(最直观)

original_dict = { 'A': [('B', 1), ('C', 3), ('D', 7)], 'B': [('D', 5)], 'C': [('D', 12)] }
result_list = []

# 遍历原字典的每个起点节点和对应的邻接列表
for start_node, edges in original_dict.items():
    # 遍历每个邻接关系(终点+权重)
    for end_node, weight in edges:
        # 拼接成三元组,加入结果列表
        result_list.append( (start_node, end_node, weight) )

print(result_list)

运行后就能得到你想要的结果:[('A', 'B', 1), ('A', 'C', 3), ('A', 'D', 7), ('B', 'D', 5), ('C', 'D', 12)]

方法二:列表推导式(更简洁)

如果喜欢更紧凑的写法,可以用Python的列表推导式一步完成:

original_dict = { 'A': [('B', 1), ('C', 3), ('D', 7)], 'B': [('D', 5)], 'C': [('D', 12)] }
result_list = [ (start, end, w) for start, edges in original_dict.items() for end, w in edges ]

print(result_list)

这个逻辑和上面的for循环完全一致,只是把嵌套循环写到了一行里,适合追求简洁的场景。

再说说你原代码的问题

  • 没有定义变量i,直接用i[0]会触发NameError
  • 错误地在往字典里添加内容,但我们的目标是生成列表,逻辑方向完全错误
  • 使用了未定义的dict1,同样会报错
  • 原字典的变量名用dict其实不太好——dict是Python的内置类型名称,尽量避免用它当变量名,容易引发意外问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:22:33