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节点属性绘制

networkx图论Breadth First Search广度优先搜索遍历BFS,基于队列,Python

NetworkX 中按边和节点属性查询图的最佳实践

vue中v-for循环的时候为啥要添加:key属性

networkx图论Depth First Search广度优先搜索遍历DFS,基于栈,Python

创建一个网络,其中节点使用 networkx 存储多个属性数据