将一个元素放在defaultdict中的正确位置

时间:2017-11-24 15:57:42

标签: python algorithm dictionary networkx defaultdict

嗨我是python的新手,我试图创建我的第一个程序来查找具有+1符号的节点集群。我有一个包含3列的文件(起始节点,结束节点,节点之间的符号),如下所示:

1   2   1
1   3   1
2   3   1
2   4   -1
2   5   1
3   6   -1
4   7   -1
4   9   -1

我创建图表并保存字典中的所有邻接。现在我想在另一个字典(defaultdict(list))中保存所有超节点(团队节点之间有+1符号)。所以我写了下面的代码:

G = nx.Graph()
G = nx.read_edgelist('example.txt', delimiter='\t', nodetype=int, data=(('sign', int),))
adjacencies = {}
supernodes = defaultdict(list)

for i in G.nodes:
    adjacencies[i] = list(G.neighbors(i))


flag = 0
if flag == 0:
    for node in G.nodes:
        supernodes[node].append(node)
        flag = 1
        break
else:
    for i in G.nodes():
        for j in adjacencies[i]:
            if G.get_edge_data(i,j) == 1:
                for v in supernodes.values():

我在这里停止代码,因为我不知道如何将元素放到dict的正确位置。我想要做的步骤是: 我有超级节点,如:

1 : [1,2,3,5]
2 : [4]
3 : [6,8]

1. check if edge(i,j) is +1 and then
2.      if i is in supernodes then add j in the same list where i is
3.      if j is in supernodes then add i in the same list where j is
4.      if i and j is not in supernodes the add a new list in supernodes and add 
        i,j elements

1 个答案:

答案 0 :(得分:1)

您要使用collections.defaultdict的任何特殊原因?

无论您使用deafaultdict还是常规dict,都可以使用以下代码查找超级节点。方法setdefault适用于两者。查看setdefault here的内容。

G = nx.read_edgelist('example.txt', delimiter='\t', nodetype=int, data=(('sign', int),))

supernodes = dict()
for edge in G.edges(data='sign'):
    sign = edge[2]
    if sign == 1:
        node1 = edge[0]
        node2 = edge[1]
        supernodes.setdefault(node1, [node1])
        supernodes.setdefault(node2, [node2])
        supernodes[node1].append(node2)
        supernodes[node2].append(node1)

[编辑]查看图表的图形并了解OP想要的内容,这是一种方法:

import networkx as nx

G = nx.read_edgelist('example.txt', delimiter='\t', nodetype=int, data=(('sign', int),))
G1 = nx.Graph()
G1.add_weighted_edges_from([edge for edge in G.edges(data='sign') if edge[2]==1])
G1.add_nodes_from(list(G.nodes))
supernodes = list(nx.connected_components(G1))

supernodes是一个集合列表,其中每组节点都是图片中的一个 blob