Python 矩阵,如果边存在于2个节点之间,则取值1,否则取邻接字典中的值0

Python 矩阵,如果边存在于2个节点之间,则取值1,否则取邻接字典中的值0,python,dictionary,matrix,adjacency-matrix,edges,Python,Dictionary,Matrix,Adjacency Matrix,Edges,我有这样一本邻接词典: {1: {8, 2}, 2: {3}, 5: {9, 7}, 7: {8}, 3: {8, 4}, 4: {5}, 8: {9}, 9: {7}} 我的代码是: list = [(1, 2), (2, 3), (5, 7), (5, 9), (7, 8), (3, 4), (4, 5), (5, 7), (7, 8), (8, 9), (9, 7), (1, 8), (3, 8)] dic = {} for x, y in list: dic.setdefa

我有这样一本邻接词典:

{1: {8, 2}, 2: {3}, 5: {9, 7}, 7: {8}, 3: {8, 4}, 4: {5}, 8: {9}, 9: {7}}

我的代码是:

list = [(1, 2), (2, 3), (5, 7), (5, 9), (7, 8), (3, 4), (4, 5), (5, 7), (7, 8), (8, 9), (9, 7), (1, 8), (3, 8)]

dic = {}
for x, y in list:
    dic.setdefault(x, set()).add(y)
return dic
我想生成一个矩阵,如果在2个节点之间存在一条边,那么它的值为1,否则为0。下面是我想要的示例:

[0,1,0,0,0,0,0,1,0]
[0,0,1,0,0,0,0,0,0]
[0,0,0,1,0,0,0,1,0]
[0,0,0,0,1,0,0,0,0]
[0,0,0,0,0,0,1,0,1]
[0,0,0,0,0,0,0,1,0]
[0,0,0,0,0,0,0,0,1]
[0,0,0,0,0,0,1,0,0]
这就是我想要的邻接词典

提前感谢

您可以:

import pprint

lst = [(1, 2), (2, 3), (5, 7), (5, 9), (7, 8), (3, 4), (4, 5), (5, 7), (7, 8), (8, 9), (9, 7), (1, 8), (3, 8)]

dic = {}
for x, y in lst:
    dic.setdefault(x, set()).add(y)

size = max(dic) + 1
result = [[int(j in dic and i in dic[j]) for i in range(1, size)] for j in range(1, size)]

pprint.pprint(result) # just for pretty printing
你可以做:

import pprint

lst = [(1, 2), (2, 3), (5, 7), (5, 9), (7, 8), (3, 4), (4, 5), (5, 7), (7, 8), (8, 9), (9, 7), (1, 8), (3, 8)]

dic = {}
for x, y in lst:
    dic.setdefault(x, set()).add(y)

size = max(dic) + 1
result = [[int(j in dic and i in dic[j]) for i in range(1, size)] for j in range(1, size)]

pprint.pprint(result) # just for pretty printing

这是另一个解决方案

import numpy as np
dic = {1: {8, 2}, 2: {3}, 5: {9, 7}, 7: {8}, 3: {8, 4}, 4: {5}, 8: {9}, 9: {7}}
arr = np.zeros((9,9))
for k in dic.keys():
    for v in dic[k]:
        arr[k-1][v-1] = 1
print(arr)

这是另一个解决方案

import numpy as np
dic = {1: {8, 2}, 2: {3}, 5: {9, 7}, 7: {8}, 3: {8, 4}, 4: {5}, 8: {9}, 9: {7}}
arr = np.zeros((9,9))
for k in dic.keys():
    for v in dic[k]:
        arr[k-1][v-1] = 1
print(arr)