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
相关产品推荐
相关产品推荐

