与networkx-python一起使用“添加边”时缺少边

与networkx-python一起使用“添加边”时缺少边,python,networkx,Python,Networkx,我有一个dict,它的边是两元组格式的,它们的值我想添加到networkx图形中 mydict看起来像下面打印的内容: #打印(mydict) {('StopPoint:59:3786294','StopPoint:59:3730342'):{'time_tc':120.0}, ('StopPoint:59:3730342','StopPoint:59:4255013'):{'time_tc':60.0}, ('StopPoint:59:4255013','StopPoint:59:378629

我有一个
dict
,它的边是两元组格式的,它们的值我想添加到networkx
图形中

mydict
看起来像下面打印的内容:

#打印(mydict)
{('StopPoint:59:3786294','StopPoint:59:3730342'):{'time_tc':120.0},
('StopPoint:59:3730342','StopPoint:59:4255013'):{'time_tc':60.0},
('StopPoint:59:4255013','StopPoint:59:3786297'):{'time_tc':120.0},
('StopPoint:59:3786297','StopPoint:59:3786298'):{'time_tc':180.0},
('StopPoint:59:3786298','StopPoint:59:3786299'):{'time_tc':60.0},…}
#len(mydict)=233116
我注意到,在使用(mydict)
len(G.edges)
=123976)中的
G.add\u edges\u后,我丢失了将近100000条边。当我绘制
G
时,这一点也很明显,因为许多节点没有用边链接在一起。下面是
G.edges
的样子:

#打印(G.edges)
{('StopPoint:93:1184','StopPoint:93:1260'):{'time_tc':180.0},
('StopPoint:93:1184','StopPoint:55:79'):{'time_map':126},
('StopPoint:93:1184','StopPoint:55:80'):{'time_map':126},
('StopPoint:93:1184','StopPoint:8711610:800:P'):{'time_map':336},
('StopPoint:93:1184','StopPoint:93:1183'):{'time_map:252},…}
#透镜(G边)=123976

mydict
中不应该有任何重复项,因此我不明白为什么边的总和没有添加到图形中。有人知道吗?

这是因为
mydict
变量既包含
(x,y)
又包含
(y,x)
。如果您构建一个
networkx.Graph
(而不是
networkx.DiGraph
),则
(x,y)
被视为与
(y,x)
相同。例如:

import networkx as nx
mydict = {(3,4): 5, (4,3): 6, (1,2): 6}
g = nx.Graph()
di_g = nx.DiGraph()
g.add_edges_from(mydict)
di_g.add_edges_from(mydict)
print(g.edges) # [(3, 4), (1, 2)]
print(di_g.edges) # [(3, 4), (4, 3), (1, 2)]
您可以构建一个
有向图
,也可以从
mydict
中删除双精度图(这取决于您的具体需要)。要从
mydict
提取所有双精度值,只需执行以下操作:


doubles=set(如果mydict中的(k[1],k[0]),则mydict中的k为frozenset(k))

您使用的是图形还是有向图?如果您正在构建一个图形,并且您的dict同时包含(x,y)和(y,x),那么其中一个将被忽略!我正在用
G=nx.graph()
构建一个图形,然后添加了节点和节点属性,看起来效果不错。我只是在边上遇到了麻烦。len(set(frozenset(k)表示mydict中的k))==len(mydict)
的结果是什么?您需要检查
mydict
do的两个键是否指向相同的节点
len(set(frozenset(k)表示mydict中的k))==len(mydict)
返回一个
False
。因此,据我所知,确实有一些重复的关键。当我构建
mydict
时,我发现这很奇怪,因为我只保存了一组
(x,y)
键,所以里面不应该有
(y,x)
键。问题是dict对我来说太大了,无法手动检查。好吧,用python提取所有的double<代码>设置(如果mydict中的(k[1],k[0]),则mydict中k的冻结集(k)