获取一个包含行的文件,并将它们转换为一个包含列表的词典



我的问题是我想读取一个有多行的文件,例如:

be:was, were
I:you
Tom

现在我想把第一个元素(在":"之前(变成dict的键,把":"之后的所有元素都变成一个列表。每个列表条目都用","分隔

所以它应该是这样的:

words_dict = {"be" : ["was", "were"], "I" : ["you"], "Tom" : []}

我想出了这样的东西:

with open(words, 'r') as file:
for line in file:
words = line.strip().split(':')

我不知道这是否是正确的方法,也不知道下一步该怎么做。

也许是类似的东西

with open(words, 'r') as file:
for line in file.readlines(1024):
split = line.removesuffix('n').split(':', maxsplit=1)
if len(split) == 2:
vals = [val.strip() for val in split[1].split(',')]
else: # : not found in line
vals = []
d[split[0]] = vals

如果你能清理数据,总是保证密钥后面有一个:,那么循环就可以大大简化;

with open(words, 'r') as file:
for line in file.readlines(1024):
key, value = line.removesuffix('n').split(':', maxsplit=1)
d[key] = [val.strip() for val in value.split(',')]

您应该首先用':'分割这一行,以获得键和字符串的其余部分(如果有(,它们稍后将成为值。然后使用','拆分这些值,如果剥离后这些值不为空,则对其进行过滤。

试试这个:

d = {}
with open(words) as f:
for line in f:
key, *values = line.strip().split(':', maxsplit=1)
values = ''.join(values)
values = [w for word in values.split(',') if (w := word.strip())]
d[key] = values
print(d)

输出:

{'be': ['was', 'were'], 'I': ['you'], 'Tom': []}

注意,这是因为:首先;加入";方法不会为空的可迭代项引发异常,second,"分割";也不会抱怨空字符串。

您应该能够使用字典理解:

with open(words, 'r') as file:
words = {(l:=s.rstrip('n').split(':'))[0]:l[1].split(', ') if len(l)>1 else []
for s in file}

一个简短的解决方案:

data = {}
with open('words.txt', 'r') as file:
for line in file.readlines():
key, *value = line.strip().split(':')
data[key] = list(filter(None, [i.strip() for i in ','.join(value).split(',')]))
print(data)

输出:

{'be': ['was', 'were'], 'I': ['you'], 'Tom': []}

最新更新