Граф отношений в Python - PullRequest
       8

Граф отношений в Python

0 голосов
/ 31 января 2019

Я хочу рассчитать количество друзей для каждого человека с учетом графика отношений без использования каких-либо библиотек .График представлен в виде списков списков:

graph = [[A,B],[A,C],[C,B],[B,D],[E]]

Ожидаемый вывод словаря: {'A':2, 'B':3, 'C':2, 'D':1, 'E':0}

Примечание: Поскольку у E нет друзей, E долженбыть 0

Ответы [ 4 ]

0 голосов
/ 31 января 2019

Простое решение без изменения формата ввода

>>> graph = [['A', 'B'], ['A', 'C'],['C', 'B'], ['B', 'D'], ['E']]
>>> from collections import defaultdict
>>> friends_counter = defaultdict(int)
>>> for friends in graph:
...     for person in friends:
...         friends_counter[person] += len(friends) - 1
>>> dict(friends_counter)
{'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}
0 голосов
/ 31 января 2019

Вы можете использовать библиотеку Python, специфичную для графиков, которая называется NetworkX .Я изменил данные, чтобы их было проще загружать.

import networkx as nx
graph = [['A','B'],['A','C'],['C','B'],['B','D']]

G = nx.Graph()
G.add_edges_from(graph)
G.add_node('E')

dict(G.degree)                                                         
#  {'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

Редактировать: этот ответ был дан до того, как было добавлено предупреждение "без использования библиотек".

0 голосов
/ 31 января 2019

Получил решение.Есть ли лучший способ сделать это?

graph = [['A','B'],['A','C'],['C','B'],['B','D'],['E']]
dct ={}
for v in graph:
    for x in v:
            if x in v:
                    if x in dct.keys():
                            dct[x] += 1
                    else:
                            dct[x]= len(v)-1

print(dct)
{'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}
0 голосов
/ 31 января 2019

так что вы можете сделать это

    graph = [["A","B"],["A","C"],["C","B"],["B","D"],["E"]]
    ans = {}
    for n in graph:
        if len(n) == 1:
                ans[n[0]] = ans.get(n[0], 0)
        else:
                l, r = n
                ans[l] = ans.get(l, 0) + 1
                ans[r] = ans.get(r, 0) + 1

    print(ans)
    # {'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}
...