我有一个这样的文件:
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
但是你不能遍历这样的文件,那我该怎么做呢?
我有一个这样的文件:
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
但是你不能遍历这样的文件,那我该怎么做呢?
这可能是你想要的:
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']}
key.strip()
将把 'Tim\n' 变成 'Tim'f.next()
读取并返回下一行——关键行之后的行f.next().split()
因此将该行拆分为一个列表dict_data[key.strip()] = ...
会做类似的事情:dict_data['Tim'] = [ ... ]
f.next()
改为next(f)
如果要将列表转换为整数列表而不是字符串,则不要:
dict_data[key.strip()] = next(f).split()
做这个:
dict_data[key.strip()] = [int(i) for i in next(f).split()]
state = 0
d = {}
for line in file:
if state == 0:
key = line.strip()
state = 1
elif state == 1:
d[key] = line.split()
state = 0
我认为最简单的方法是首先使用 加载整个文件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]}