gpt4 book ai didi

python - 行拆分后添加字典键和值?

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:18 24 4
gpt4 key购买 nike

如果我有例如文件:

;;;
;;;
;;;
A 1 2 3
B 2 3 4
C 3 4 5

我想把它读入 {str: list of str} 的字典中:

{'A': ['1', '2', '3'], 'B': ['2', '3', '4'], 'C': ['3', '4', '5']

我有以下代码:

d = {}
with open('file_name') as f:
for line in f:
while ';;;' not in line:
(key, val) = line.split(' ')
#missingcodehere
return d

我应该在 line.split 之后输入什么来将键和值分配为 str 和 str 列表?

最佳答案

专注于您的代码和您做错了什么。

您的 while ';;;' 几乎是在无限循环中不符合。因此,您想改变您尝试将数据插入字典的方式的逻辑。只需使用条件语句来检查 if ';;;' 在您的行中。

然后,当您从 line.strip().split(' ') 中获取键和值时,您只需将其分配给您的字典,如 d[key] = val 。但是,您需要一个列表,此时 val 目前是一个字符串,因此也对 val 调用 split。

此外,您不需要key 和 val 两边加上括号。它为您的代码提供了不需要的噪音

最终结果会给你:

d = {}
with open('new_file.txt') as f:
for line in f:
if ';;;' not in line:
key, val = line.strip().split(' ')
d[key] = val.split()

print(d)

使用您的示例输入,输出为:

{'C': ['3', '4', '5'], 'A': ['1', '2', '3'], 'B': ['2', '3', '4']}

最后,对实现进行改进,因为它可以更像 Pythonic。我们可以简化这段代码并提供一个小的改进来更通用地拆分,而不是计算显式空间:

with open('new_file.txt') as fin:
valid = (line.split(None, 1) for line in fin if ';;;' not in line)
d = {k:v.split() for k, v in valid}

所以,在上面,您会注意到我们的拆分看起来像这样:split(None, 1)。我们在哪里提供 maxsplit=1

根据 split 的文档字符串,它解释得很好:

Return a list of the words in S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator and empty strings are removed from the result.

最后,我们简单地使用字典理解来获得我们的最终结果。

关于python - 行拆分后添加字典键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com