Python 过滤NetworkX图形以列出来自具有特定属性的节点的所有边

Python 过滤NetworkX图形以列出来自具有特定属性的节点的所有边,python,graph,networkx,Python,Graph,Networkx,我有一个NetworkX图形,图形中加载了各种节点属性。我想遍历这个图,首先找到包含属性'metric':'Top2'的所有节点。然后,一旦我有了这个列表,我想列出所有“Top2”节点的边,并列出“Top2”节点与属性为“city”:“Dallas”的节点之间的任何边 我能够成功地将我的图形和属性加载到NetworkX中,但我似乎不知道如何像我想的那样找到节点属性过滤部分 最后,我想找到属性为“Top2”的节点与属性为“Dallas”的节点直接接触的任何连接: D,B D,F D,G 代码 n

我有一个NetworkX图形,图形中加载了各种节点属性。我想遍历这个图,首先找到包含属性
'metric':'Top2'
的所有节点。然后,一旦我有了这个列表,我想列出所有“Top2”节点的边,并列出“Top2”节点与属性为“city”:“Dallas”的节点之间的任何边

我能够成功地将我的图形和属性加载到NetworkX中,但我似乎不知道如何像我想的那样找到节点属性过滤部分

最后,我想找到属性为“Top2”的节点与属性为“Dallas”的节点直接接触的任何连接:

D,B
D,F
D,G
代码

nx.绘图(g)“>

理想情况下,结果的格式如下:

D,B
D,F
D,G

这使用了两个返回bool的helper函数。您的实际结果最终将作为列表理解返回

nodes = g.node

def has_top2(n):
    return 'metric' in nodes[n] and nodes[n]['metric'] == 'Top2'

def has_dallas(n):
    return 'city' in nodes[n] and nodes[n]['city'] == 'Dallas'

[(n, u) for n, u in g.edges() 
    if (has_top2(n) and has_dallas(u)) 
    or (has_top2(u) and has_dallas(n))
]
nodes = g.node

def has_top2(n):
    return 'metric' in nodes[n] and nodes[n]['metric'] == 'Top2'

def has_dallas(n):
    return 'city' in nodes[n] and nodes[n]['city'] == 'Dallas'

[(n, u) for n, u in g.edges() 
    if (has_top2(n) and has_dallas(u)) 
    or (has_top2(u) and has_dallas(n))
]