用Python-Networkx加权邻接列表

用Python-Networkx加权邻接列表,python,graph,networkx,Python,Graph,Networkx,我在Python中使用以下结构定义了一个图: graph = { "A": {"B": 10, "C": 3}, "B": {"C": 1, "D": 2}, "C": {"B": 4, "D": 8, "E": 2}, "D": {"E": 7}, "E": {"D": 9} } 有没有办法把这个读入networkx请 我尝试了G=nx。阅读adjlist(graph)并查看了一些json方法(),但没有一个方法非常适合我的用例。最适合你的方法-。但它

我在Python中使用以下结构定义了一个图:

graph = {
    "A": {"B": 10, "C": 3},
    "B": {"C": 1, "D": 2},
    "C": {"B": 4, "D": 8, "E": 2},
    "D": {"E": 7},
    "E": {"D": 9}
}
有没有办法把这个读入
networkx


我尝试了
G=nx。阅读adjlist(graph)
并查看了一些
json
方法(),但没有一个方法非常适合我的用例。

最适合你的方法-。但它使用的dict格式略有不同。它使用带有单个“权重”元素的字典,而不是您拥有的权重编号:

{“E”:7}->{“E”:{“weight”:7}

因此,您需要使用以下代码转换
图形
dict:

import networkx as nx

graph = {
    "A": {"B": 10, "C": 3},
    "B": {"C": 1, "D": 2},
    "C": {"B": 4, "D": 8, "E": 2},
    "D": {"E": 7},
    "E": {"D": 9}
}

# Convert integer weights to dictionaries with a single 'weight' element
gr = {
    from_: {
        to_: {'weight': w}
        for to_, w in to_nodes.items()
    }
    for from_, to_nodes in graph.items()
}

G = nx.from_dict_of_dicts(gr, create_using=nx.DiGraph)
G.edges.data('weight')
输出:

OutEdgeDataView([
('D', 'E', 7),
('B', 'D', 2),
('B', 'C', 1),
('A', 'B', 10),
('A', 'C', 3),
('C', 'E', 2),
('C', 'B', 4),
('C', 'D', 8),
('E', 'D', 9)
])

p.S.
gr
dict看起来像这样:

{'A': {'B': {'weight': 10}, 'C': {'weight': 3}},
 'B': {'C': {'weight': 1}, 'D': {'weight': 2}},
 'C': {'B': {'weight': 4}, 'D': {'weight': 8}, 'E': {'weight': 2}},
 'D': {'E': {'weight': 7}},
 'E': {'D': {'weight': 9}}}

你试过或者仅仅试过
nx.Graph(Graph)
?没有乐趣-
nx.Graph(Graph)
无法捕捉权重(据我所知,使用
vars(G)
,和
来自dict的
给出
类型错误:'int'对象不可编辑
谢谢-这是一段转换字典的伟大代码!