类型错误:“NodeView”对象不支持项目分配 - NetworkX

2024-05-12

我正在完成本教程:https://www.datacamp.com/community/tutorials/networkx-python-graph-tutorial https://www.datacamp.com/community/tutorials/networkx-python-graph-tutorial

import itertools
import copy
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt    
nodelist = pd.read_csv('https://gist.githubusercontent.com/brooksandrew/f989e10af17fb4c85b11409fea47895b/raw/a3a8da0fa5b094f1ca9d82e1642b384889ae16e8/nodelist_sleeping_giant.csv')

g = nx.Graph()

for i, nlrow in nodelist.iterrows():
    g.node[nlrow['id']] = nlrow[1:].to_dict()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-80-35b1a259a02d> in <module>()
      1 for i, nlrow in nodelist.iterrows():
----> 2     g.node[nlrow['id']] = nlrow[1:].to_dict()

TypeError: 'NodeView' object does not support item assignment

运行的结果应该如下所示:

[('rs_end_south', {'X': 1865, 'Y': 1598}),
 ('w_gy2', {'X': 2000, 'Y': 954}),
 ('rd_end_south_dupe', {'X': 273, 'Y': 1869}),
 ('w_gy1', {'X': 1184, 'Y': 1445}),
 ('g_rt', {'X': 908, 'Y': 1378}),
 ('v_rd', {'X': 258, 'Y': 1684}),
 ('g_rs', {'X': 1676, 'Y': 775}),
 ('rc_end_north', {'X': 867, 'Y': 618}),
 ('v_end_east', {'X': 2131, 'Y': 921}),
 ('rh_end_south', {'X': 721, 'Y': 1925})]

但我无法让 python 输出id接下来是字典。


代替:

g.node[nlrow['id']] = nlrow[1:].to_dict()

use:

g.nodes[nlrow['id']].update(nlrow[1:].to_dict())

这有效是因为g.nodes[x]无非是一个字典。尽管如此,我不确定为什么文档提出了另一种方式。

Note:

乔尔说得很好在评论中 https://stackoverflow.com/questions/47045155/typeerror-nodeview-object-does-not-support-item-assignment-networkx#comment81041787_47045155,我认为这一点非常重要:

注意 - 您使用的是 networkx 2.0 版本,对吗?这是最近的事,而且 所以我怀疑这是写作者的不兼容 它使用版本1.11。我认为networkx提供了做这些事情的方法 命令试图在不直接编辑底层数据的情况下完成 图的结构。

所以我的解决方案基本上是通过了解底层数据结构而不是使用公共API,这不是好的编程风格。

从2.4版本开始 https://networkx.github.io/documentation/stable/release/release_2.4.html#deprecations, G.node已被弃用,有利于G.nodes(谢谢你,WiccanKarnak)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型错误:“NodeView”对象不支持项目分配 - NetworkX 的相关文章

随机推荐