Как построить словарь, который отображает узлы в его степени в сети x2.1, python3? - PullRequest
0 голосов
/ 14 ноября 2018

что я пытаюсь здесь:

def comm_deg(G):
    nodes = G.nodes()
    A=nx.adj_matrix(G)
    deg_dict = {}
    n = len(nodes)  
    degree= A.sum(axis = 1)
    for i in range(n):
    deg_dict[nodes[i]] = degree[i,0]
    return deg_dict

это показывает, что KeyError: 0, я считаю, что при использовании nodes[] degree[,] возникнет эта проблема

вот полное сообщение об ошибке:

> File "/Users/shaoyupei/Desktop/code/untitled1.py", line 25, in comm_deg
> deg_dict[nodes[i]] = degrees[i,0]

> File "/anaconda3/lib/python3.6/site-packages/networkx/classes/reportviews.py", line 178, in __getitem__
> return self._nodes[n]

> KeyError: 0

1 Ответ

0 голосов
/ 14 ноября 2018

Итак, здесь есть несколько проблем.

Во-первых, есть лучший способ создать диктовку, чем то, что вы делаете.Фактически, он в основном уже встроен. G.degree уже является объектом, похожим на диктовку, поэтому G.degree[node] даст степень node.

Если вы действительно хотите, чтобы это было диктом, лучшимспособ сделать это, вероятно,

deg_dict = dict(G.degree)

Теперь давайте посмотрим на ошибку, которую вы получаете.G.nodes() - это не список (это тоже что-то вроде диктанта).Поэтому, если вы установите nodes=G.nodes(), тогда nodes не будет списком.Здесь nodes[0] пытается вернуть атрибуты узла 0 (и для чего это стоит, если ваши узлы не имеют каких-либо атрибутов nodes[node] вернет пустой dict).Но (я считаю) 0 не является узлом в вашем графике G.Так вот в чем смысл вашего сообщения об ошибке.

Кроме того, как правило, если вы когда-либо делаете n=len(x), а затем for i in range(n):, вы почти всегда действительно хотите сделать for name in x: или если вы действительнонужен индекс, вы можете сделать for i, name in enumerate(x).

Так что если вы хотите использовать подход, который вы использовали,

for i, node in nodes:
    deg_dist[node] = degree[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...