Python,如何使用文件中的行作为字典中的键,使用下一行的值?

时间:2013-04-09 18:27:59

标签: python file dictionary

我有一个这样的文件:

   Ben
   0 1 5 2 0 1 0 1
   Tim
   3 2 1 5 4 0 0 1

我想制作一个如下字典:

    {Ben: 0 1 5 2 0 1 0 1, Tim : 3 2 1 5 4 0 0 1}

所以我想的是:

   for line in file:
       dict[line] = line + 1

但你无法遍历这样的文件,所以我该如何去做 这样做?

3 个答案:

答案 0 :(得分:6)

这可能是你想要的:

dict_data = {}
with open('data.txt') as f:
    for key in f:
        dict_data[key.strip()] = next(f).split()

print dict_data

输出:

  

{'蒂姆':['3','2','1','5','4','0','0','1'],'本':['0' ,'1','5','2','0','1','0','1']}

讨论

  • for循环假设每一行都是一个键,我们将读取循环体中的下一行
  • key.strip()会将'Tim \ n'变为'Tim'
  • f.next()读取并返回下一行 - 关键行后面的行
  • f.next().split()因此将该行拆分为列表
  • dict_data[key.strip()] = ...会执行以下操作:dict_data['Tim'] = [ ... ]

更新

  • 感谢Blckknght指针。我将f.next()更改为next(f)

更新2

如果要将列表转换为整数列表而不是字符串,则代替:

        dict_data[key.strip()] = next(f).split()

这样做:

        dict_data[key.strip()] = [int(i) for i in next(f).split()]

答案 1 :(得分:1)

state = 0
d = {}
for line in file:
    if state == 0:
        key = line.strip()
        state = 1
    elif state == 1:
        d[key] = line.split()
        state = 0

答案 2 :(得分:1)

我认为最简单的方法是首先使用file.readlines()加载整个文件,该文件加载整个文件并返回行列表。然后你可以通过理解来创建你的字典:

lines = my_file.readlines()
my_dict = dict(lines[i:i+2] for i in range(0, len(lines), 2))

对于您的示例文件,这将为my_dict提供内容:

{"Ben\n": "0 1 5 2 0 1 0 1\n", "Tim\n": "3 2 1 5 4 0 0 1\n"}

另一种方法是使用一次读取两行的while循环:

my_dict = {}
while True:
    name = file.readline().strip()
    if not name: # detect the end of the file, where readline returns ""
        break
    numbers = [int(n) for n in file.readline().split()]
    my_dict[name] = numbers

这种方法允许您轻松地对行进行一些处理而不是早期版本中的理解,例如剥离换行符并将数字行拆分为实际int对象列表。

示例文件的结果是:

{"Ben": [0, 1, 5, 2, 0, 1, 0, 1], "Tim": [3, 2, 1, 5, 4, 0, 0, 1]}