从文件中读取并添加到没有列表的字典

Read from file and add to dictionary without lists

这是我的文本文件的示例:

A, 100 101 102
B, 103 104

我想从这个文件中读取并创建一个字典。

这是我的代码:

def readFromFile():
d = {} # empty dictionary
with open('file.txt') as fr: #read from text file
    for line in fr.readlines(): # reading text file by line
        k, v = line.split(',') # splitting the line on text file by ',' to define the key and values
        v = v.split() # splitting the values in each key into a list
        for n in range( len(v) ): 
            v[n] = int(v[n]) # convert student id in list from str to int
        d[k] = v # build dictionary with keys and its values
return d

这是我的输出结果:

{'A': [100, 101, 102], 'B': [103, 104]}

我想使用此函数将 A 的值更新为 int 209:

def writeToFile(d):
with open('file.txt', 'w') as fw:
    for k,v in d.items():
        print(f'{k}, {v}', file = fw)

我的文件会这样写:

A, [100, 101, 102, 209]

这会导致函数 readFromFile() 抛出错误,因为文本文件的格式不再相同。

文本文件的期望输出是这样的:

A, 100 101 102 209

问题是您没有以预期的格式写入文件。您需要编写与您阅读的格式相同的格式。

def write_to_file(filename, d):
    with open(filename, 'w') as fw:
        for k,v in d.items():
            line_data = ' '.join(map(str, v))
            print('{}, {}'.format(k, line_data), file = fw)

您的 readFromFile 函数未验证格式。所以它当然会抛出错误——只要捕获任何错误并将其报告为错误的文件内容即可。

为了扩展 line_data,您希望将一个列表组合成一个字符串,用 space 分隔,因此您将使用 space 作为分隔符,并且在对 https://docs.python.org/3/library/stdtypes.html#str.join

的调用中作为可迭代对象列出

当然,您不能使用str.join 来连接整数。您需要将它们全部转换为 str,因此您将 map(str, v) 作为 iterable 传递给 join。 built-in 函数 https://docs.python.org/3/library/functions.html#map 只是将函数(在本例中转换为 str)应用于每个项目。