【问题标题】:Python - adjacency list from text file into a dictionaryPython - 从文本文件到字典的邻接列表
【发布时间】:2020-09-13 10:30:20
【问题描述】:

使用networkx,我能够生成一个表示图形邻接列表的文本文件。我需要将文本文件转换成字典。所以键是每行最左边的数字,它是该行右边其余数字的值列表。值列表有时可能为空。我们可以调用输入文件test.txt。谢谢!

例如,这就是我要寻找的: {1:[],2:[3,7],3:[4,7,9],4:[7,9],9:[]}

这是生成的要转换的文本文件:

#adjlist.py
# GMT Tue May 26 14:48:55 2020
# 
1
2 3 7
3 4 7 9
4 7 9
7 9
9

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python dictionary input text adjacency-list


【解决方案1】:

使用open() 函数可以轻松读取文本文件。我建议使用.read() 方法而不是遍历打开的文件来读取行,因为将文件批量读取到内存中比遍历磁盘上文件中的行要快得多。当然,如果文件小于您的 RAM。 .strip() 返回删除前导和尾随字符的字符串副本。 .split() 使用给定的分隔符拆分,这里我们使用\n 将文件拆分为行。

最后,我们遍历每一行并在该行上调用.split(),这次按空格分割。这将返回一个项目列表,其中 [0] 索引项目将是您的键,其余 ([1:]) 将是您的值。

您可以使用collections 内置库中的defaultdict 来实现单个字典键的多个项目。

from collections import defaultdict

with open("test.txt") as f:
    lines = f.read().strip().split("\n")

d = defaultdict(list)

for line in lines:
    ls = line.split(" ")
    d[ls[0]] = ls[1:]

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多