我一直在将输入文件放入我的算法的正确格式中。
我想阅读此文本文件:
1 -> 7,8
11 -> 1,19
219 -> 1,9,8
进入此词典:
{ 1: [7, 8], 11: [1, 19], 219: [1, 9, 8]}
我尝试了此代码:
with open("file.txt", "r+") as f:
f.write(f.read().replace("->", " "))
f.close()
d = {}
with open("file.txt") as file:
for line in file:
(key, val) = line.split()
d[key] = val
但是,使用此代码,它陷入了以下事实,即第二列中有2个以上的参数。如何从第二列中的元素中列出列表,并使用该列表作为每个密钥的值?
有无需执行此预处理步骤即可删除'->'
。只需使用:
d = {}
with open("file.txt") as file:
for line in file:
left,right = line.split('->')
d[int(left)] = [int(v) for v in right.split(',')]
您甚至可以使用词典理解并使其成为单线:
with open("file.txt") as file:
d = {int(left) : [int(v) for v in right.split(',')]
for left,right in (line.split('->') for line in file)
}
这给出了:
>>> d
{1: [7, 8], 11: [1, 19], 219: [1, 9, 8]}
在字典理解中嵌套带有 str.split
的生成器表达式,将密钥转换为整数并将值映射到整数:
with open('file.txt') as f:
result = {int(k):list(map(int, v.split(','))) for k,v in (line.split(' -> ') for line in f)}