Networkx:通过循环遍历节点列表添加属性时,IndexError:列表索引超出范围
Posted
技术标签:
【中文标题】Networkx:通过循环遍历节点列表添加属性时,IndexError:列表索引超出范围【英文标题】:Networkx: When adding attributes by looping through the list of nodes, IndexError: list index out of range 【发布时间】:2020-08-06 18:13:33 【问题描述】:Python 中 Networkx 的问题:
我使用分隔符“,”将我的 csv 文件上传到 Python。我现在有一个节点列表和一个边缘列表。当我尝试将 csv(节点)文件中的属性分配给空字典时,我收到错误消息;
IndexError: 列表索引超出范围
Herbey 我添加了一段代码。
nodereader = csv.reader(nodecsv, delimiter=(','))
nodes= [n for n in nodereader][1:]
node_names = [n[0] for n in nodes] # List 1
household_dict =
household_dict[node[0]]=node[2]
为什么它不起作用?问题是我的代码没有将每一行分成不同的列。下面是csv文件的结构。
CSV 文件(只有一列):
身份证,标签,家庭,生产者,剩余
0,Klant1,2,Ja,1 1,Klant2,2,Nee,0 2,Klant3,4,Nee,0
【问题讨论】:
每当您认为变量已定义但未定义时出现错误,值得在前一行放置一个打印语句。试试for n in nodes: print(n)
我敢打赌标题和节点名称之间的空行是你的问题。您可能会看到打印了一个空行。
感谢您的回复!不幸的是,print(n) 显示第一行:0,Klant1,2Ja,2。并且:for n in nodes: print(n) ,显示整个 excel 正确
【参考方案1】:
我不想深入研究您从文件中提取的节点。但是,请参阅下面解析 csv 的一般语法。您可以根据自己的目的轻松调整它。
with open('filePath\\fileName.csv', mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file)
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Column names are ", ".join(row)')
line_count += 1
print(f'\tID: row["Id"], Label: row["Label"], Household: row["Household"], Producer: row["Producer"], Surplus: row["Surplus"]')
line_count += 1
print(f'Processed line_count lines.')
【讨论】:
第二部分仍然返回错误------------------------ ---------------- 列名是Id,Label,Household,Producer,Surplus ---------------------- ------------------------------------------- ----> 8 print(f'\tID: row["Id" ],标签:row["Label"],家庭:row["Household"],生产者:row["Producer"],剩余:row["Surplus"]') 9 line_count += 1 10 print(f'Processed line_count 行。') -------KeyError: 'Id'以上是关于Networkx:通过循环遍历节点列表添加属性时,IndexError:列表索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章
networkx图论Breadth First Search广度优先搜索遍历BFS,基于队列,Python