gpt4 book ai didi

python - 为文件中的键附加多个值

转载 作者:行者123 更新时间:2023-11-30 22:49:54 26 4
gpt4 key购买 nike

我有一个类似于下面的文件:

t_air_sens1
laten
t_air_sens1
periodic
t_air_air
laten
t_air_air
periodic
...
...

我想制作一个字典,以便将latenperiodic的值分配给t_air_sens1的每个键等。最终结果必须如下所示:

{
"t_air_sens1": [laten,periodic]
"t_air_air": [laten,periodic]
...
...
}

我确实编写了以下代码:

prop_dict = {}
with open('file.pl') as f, open('result.pl', 'w') as procode:
for line in f:
if line[0] in prop_dict:
prop_dict[line[0]].append(line[1])
else:
prop_dict[line[0]] = [line[1]]
#will write the values in "result.pl"

但是当我尝试打印字典时得到的结果如下所示:

{'p': ['e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e'],
't': ['_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_',
'_', '_', '_', '_', '_', '_', '_', '_', '_'],
'l': ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']}

我可以做什么来修复它?我需要如何进行查询才能获得正确的结果?

最佳答案

line[0]line[1] 是字符串中的单个字符,而不是当前行和下一行。

文件对象是迭代器; for 循环每次迭代都会从中获取新行,但您也可以使用 next() function拉入另一行。使用它可以一次读取两行:

prop_dict = {} 
with open('file.pl') as f:
for key in f:
key = key.rstrip('\n')
# get the next line as the value
value = next(f).rstrip('\n')
prop_dict.setdefault(key, []).append(value)

我还用过dict.setdefault()为字典中缺少的任何键插入一个空列表。与 prop_dict[key] 一样,它会返回字典中的当前值,但如果没有这样的键,则先执行 prop_dict[key] = []返回那个空列表。

上面的工作原理是,for 循环在循环迭代时逐行读取,基本上是通过内部使用 next() 实现的。在循环中调用 next(f) 只是绘制了一条额外的行,并且 for 循环再次从那里继续,因此您在读取属性名称 ( >key)和属性值(value)。

请注意,如果通过读取 for 中的最后一行到达文件末尾,next() 可能会引发 StopIteration 异常环形;这表明您的文件没有偶数行。如果这不是错误,您可以指定默认值:如果文件已耗尽,next(f, '') 将返回空字符串 ''

关于python - 为文件中的键附加多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39559372/

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