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

Dav*_*K11 1 python file-io dictionary python-3.x

我一直在努力将输入文件转换为我的算法的正确格式.

我想阅读这个文本文件:

1 -> 7,8
11 -> 1,19
219 -> 1,9,8
Run Code Online (Sandbox Code Playgroud)

进入这本词典:

{ 1: [7, 8], 11: [1, 19], 219: [1, 9, 8]}
Run Code Online (Sandbox Code Playgroud)

我试过这段代码:

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
Run Code Online (Sandbox Code Playgroud)

但是使用这个代码,它会被第二列中有超过2个参数的事实所困扰.如何从第二列中的元素中创建列表并使用该列表作为每个键的值?

Wil*_*sem 5

没有必要做预处理步骤去除'->'.只需使用:

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(',')]
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用词典理解并使它成为一个单行:

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)
        }
Run Code Online (Sandbox Code Playgroud)

这给出了:

>>> d
{1: [7, 8], 11: [1, 19], 219: [1, 9, 8]}
Run Code Online (Sandbox Code Playgroud)