从文本文件中的行中剥离字符串,并将列读取为字典,并以列表为值



我一直在将输入文件放入我的算法的正确格式中。

我想阅读此文本文件:

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)}

最新更新