Python如何将列表形式的图转换为邻接表字典结构
邻接表转换实现方案
问题分析
你当前的错误是将终点和权重作为集合元素存入,而非以键值对形式存入嵌套字典,导致结构混乱。以下是针对有向/无向图的两种正确实现:
原始输入示例
graphConvert = [[('C', 'B', 4)], [('A', 'D', 2)], [('D', 'C', 3)], [('A', 'C', 4)]]
1. 有向图邻接表(仅保留原始边方向)
adjacency_list = {} # 遍历所有嵌套边列表 for edge_group in graphConvert: # 提取每条边的起点、终点、权重 start_node, end_node, weight = edge_group[0] # 初始化起点对应的嵌套字典(若不存在) if start_node not in adjacency_list: adjacency_list[start_node] = {} # 存入终点与权重的键值对 adjacency_list[start_node][end_node] = weight print(adjacency_list)
输出结果:
{'C': {'B': 4}, 'A': {'D': 2, 'C': 4}, 'D': {'C': 3}}
2. 无向图邻接表(双向添加边,匹配你预期的格式)
如果是无向图,需要同时添加反向边:
adjacency_list = {} for edge_group in graphConvert: start_node, end_node, weight = edge_group[0] # 处理正向边 if start_node not in adjacency_list: adjacency_list[start_node] = {} adjacency_list[start_node][end_node] = weight # 处理反向边 if end_node not in adjacency_list: adjacency_list[end_node] = {} adjacency_list[end_node][start_node] = weight print(adjacency_list)
输出结果(与你预期一致):
{'C': {'B': 4, 'D': 3, 'A': 4}, 'B': {'C': 4}, 'A': {'D': 2, 'C': 4}, 'D': {'A': 2, 'C': 3}}
内容的提问来源于stack exchange,提问作者CuloAtomico
相关产品推荐
相关产品推荐

