Код g.nodes (data = True) [0:10] в сети x не работает - PullRequest
0 голосов
/ 02 ноября 2019

Код:

print(g.nodes(data=True)[0:10])

Взято из Учебник по графику не работает.

Мне пришлось внести два изменения в код, как описано в двух предыдущих вопросах:

Учитывая две уже сообщенные ошибки, которые, как представляется, указывают на более новые версии NetworkX, существует ли некоторая несовместимость с последней версией NetworkX? Я запускаю его в Python 3.7.

Ошибка, которую я получаю после запуска всего кода и получения всех ожидаемых результатов, как описано в руководстве:

Traceback (most recent call last):
  File "Drawing-graphs.py", line 44, in <module>
    print(list(g.nodes(data=True)[0:10]))
  File "/opt/anaconda3/lib/python3.7/site-packages/networkx/classes/reportviews.py", line 277, in __getitem__
    ddict = self._nodes[n]
TypeError: unhashable type: 'slice'

Код в руководстве немного длинный, но очень простой. ,Он загружает график и печатает некоторые его части. Вот весь код (без последней строки он делает то, что ожидается без ошибок):


import itertools
import copy
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt

edgelist = pd.read_csv('https://gist.githubusercontent.com/brooksandrew/e570c38bcc72a8d102422f2af836513b/raw/89c76b2563dbc0e88384719a35cba0dfc04cd522/edgelist_sleeping_giant.csv')

# Grab node list data hosted on Gist

nodelist = pd.read_csv('https://gist.githubusercontent.com/brooksandrew/f989e10af17fb4c85b11409fea47895b/raw/a3a8da0fa5b094f1ca9d82e1642b384889ae16e8/nodelist_sleeping_giant.csv')

# Create empty graph

g = nx.Graph()

# Add edges and edge attributes

for i, elrow in edgelist.iterrows():
    g.add_edge(elrow[0], elrow[1], attr_dict=elrow[2:].to_dict())


# Add node attributes[- see question][1]
for i, nlrow in nodelist.iterrows():
    g.node[nlrow['id']].update(nlrow[1:].to_dict())

print(list(g.edges(data=True))[0:5])

# Preview first 10 nodes
print(g.nodes(data=True)[0:10])

1 Ответ

1 голос
/ 02 ноября 2019

Вы должны преобразовать результат g.nodes() в список, так как g.nodes() возвращает тип NodeView, который нельзя разрезать.

print(list(g.nodes(data=True))[0:10])

это должно работать на python 3.7 и networkx 2.4

...