使用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
使用open()
功能读取文本文件非常简单。我建议使用.read()
方法,而不是遍历打开的文件来读取行,因为将文件批量读取到内存中的速度比遍历磁盘上的文件要快得多。当然,如果文件小于您的RAM。 .strip()
返回字符串的副本,其中删除了前导和尾随字符。 .split()
使用给定的分隔符进行拆分,这里我们使用\n
将文件拆分为几行。 最后,我们遍历每行并在该行上调用.split()
,这次是按空间划分的。这将返回一个项目列表,其中[0]
索引的项目将是您的键,其余的([1:]
)将是您的值。
您可以使用defaultdict
内置库中的collections
来实现单个字典键的多个项目。
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:]