Python 为文件中的密钥附加多个值

Python 为文件中的密钥附加多个值,python,dictionary,key-value,Python,Dictionary,Key Value,我有一个类似于以下的文件: t_air_sens1 laten t_air_sens1 periodic t_air_air laten t_air_air periodic ... ... 我想制作一个字典,以便将laten和periodic的值分配给t_air_sens1等的每个键。最终结果必须如下所示: { "t_air_sens1": [laten,periodic] "t_air_air": [laten,periodic] ... ... }

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

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

{
    "t_air_sens1": [laten,periodic]
    "t_air_air": [laten,periodic]
     ...
     ...
}
{'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']}
我确实写了下面的代码:

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"
但当我试图打印字典时,得到的结果如下:

{
    "t_air_sens1": [laten,periodic]
    "t_air_air": [laten,periodic]
     ...
     ...
}
{'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']}
我能做些什么来修复它?我需要如何进行查询才能得到正确的结果?

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

文件对象是迭代器;for循环将在每次迭代中从中获得新行,但您也可以使用来引入另一行。使用此选项一次读取两行:

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)
我还经常为字典中缺少的任何键插入一个空列表。与prop_dict[key]类似,它将返回字典中的当前值,但如果没有这样的键,则在返回空列表之前首先执行prop_dict[key]=[]

上面的工作原理是for循环在循环迭代时逐行读取,基本上是在内部使用next。在循环中调用nextf只需画一条额外的线,for循环从那里再次继续,因此您可以交替读取属性名称键和属性值

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

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

文件对象是迭代器;for循环将在每次迭代中从中获得新行,但您也可以使用来引入另一行。使用此选项一次读取两行:

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)
我还经常为字典中缺少的任何键插入一个空列表。与prop_dict[key]类似,它将返回字典中的当前值,但如果没有这样的键,则在返回空列表之前首先执行prop_dict[key]=[]

上面的工作原理是for循环在循环迭代时逐行读取,基本上是在内部使用next。在循环中调用nextf只需画一条额外的线,for循环从那里再次继续,因此您可以交替读取属性名称键和属性值

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