Графический словарь - PullRequest
       3

Графический словарь

0 голосов
/ 10 декабря 2018

Я хотел бы получить словарь списков Python, основанный на матрице смежности.Ключи - это узлы, а значения - списки точек смежности.

Вот мой код:

A=[[1, 0, 0], [0, 0, 0], [0, 1, 1]]

d={}
for row in A:
    for col in A:
        s=A.index(row)
        if sum(row)==0:
            d[s]=[]
        else:
            for i in row:
                l=[]
                h=row.index(i)
                if i==1:
                    l.append(h)
            d[s]=l  

print (d)

Я должен увидеть:

{0: [0], 1: [], 2: [1, 2]}

Как вы можете догадаться - мой код не работает.Ваши решения?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы имеете в виду что-то вроде этого?

A=[[1, 0, 0], [0, 0, 0], [0, 1, 1]]
adj = {}

# for all nodes
for node, neighbors in enumerate(A):
    # for all neighbors of this node
    for neighbor, connection in enumerate(neighbors):
        # add to list
        if connection:
            adj[node] = adj.get(node, []) + [neighbor]
for k, v in adj.items():
    print(k, v)

Вывод:

0 [0]
2 [1, 2]

Редактировать: если вы работаете с графиками, я рекомендую networkx

0 голосов
/ 10 декабря 2018

Кажется, что это может быть легче понять как простое понимание словаря:

> A=[[1, 0, 0], [0, 0, 0], [0, 1, 1]]
> {row:[col for col, included in enumerate(cols) if included ] for row, cols in enumerate(A)}

{0: [0], 1: [], 2: [1, 2]}

Если вы хотите использовать циклы, вам нужно циклически проходить по каждой строке, а затем по каждому списку в строке,Что-то вроде:

adj = {}

for index, row in enumerate(A):
    adj[index] =  []
    for e_index, edge in enumerate(row):
        if edge:
            adj[index].append(e_index)

Каждая строка будет иметь значение, даже если это пустой список.Таким образом, вам не нужна логика с sum, просто добавьте строку и пустой список при вводе каждой строки.Затем добавьте ребра, если они существуют в графе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...