您好我是python的初学者。 我有以下文件为“test.txt”
1 2 5
2 6 7
as so on .....
我想读取值并将其存储到字典中
我提出了以下代码,但它不起作用
因为[x.split(' ') for x in edges.readline().rstrip().split(' ')]
只能访问文件的一行。
此外,这将返回无法应用int()类型转换的列表。
它可以在一个循环中访问多行,但我想知道pythonic的方法来做到这一点。
connection = {(int(source),int(dest)):int(weight) for source,dest,weight in [x.split(' ') for x in edges.readline().rstrip().split(' ')]}
请您建议正确的方法来阅读此类文件,然后将其存储在字典中。 感谢。
答案 0 :(得分:1)
如果有点长,这里的词汇理解很干净:
with open("test.txt") as f:
connection = {(a, b) : c for a,b,c in (map(int, line.split()) for line in f)}
请注意,使用生成器表达式迭代文件中的行而不是列表兼容性 - (map(int, line.split()) for line in f)
vs [map(int, line.split()) for line in f]
。这使我们可以避免将所有文件内容存储在内存中,如果文件很大,这可能很重要。
map
用于将line.split()
返回的所有字符串转换为整数。我认为在这里使用map
比同等列表理解更好:[int(x) for x in line.split()]
。
这里的逻辑分解为各个部分:
connection = {}
with open("test.txt") as f:
for line in f:
a,b,c = map(int, line.split())
connection[(a,b)] = c
要真正与dict理解等效,我们需要创建一个生成器函数来迭代文件:
def f_it(f):
for line in f:
yield map(int, line.split())
connection = {}
with open("test.txt") as f:
for a,b,c in f_it(f):
connection[(a,b)] = c