我正在尝试通过将文本文件中的两行和两行配对来将键值对添加到字典中。为什么这不起作用?
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
f = open(filename)
for line1, line2 in f.readlines():
newdata[line1] = line2
编辑:我得到的错误是
ValueError: too many values to unpack
我正在尝试通过将文本文件中的两行和两行配对来将键值对添加到字典中。为什么这不起作用?
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
f = open(filename)
for line1, line2 in f.readlines():
newdata[line1] = line2
编辑:我得到的错误是
ValueError: too many values to unpack
您正在阅读所有行,并将第一行(一个序列)分配给两个变量。这仅在第一行包含 2 个字符时才有效。将文件用作迭代器:
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
for line1 in f:
newdata[line1.strip()] = next(f, '').strip()
这里next()
从文件中读取下一行。
另一种方法是使用成对的配方:
from itertools import izip_longest
def pairwise(iterable):
return izip_longest(*([iter(iterable)] * 2), '')
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
for line1, line2 in pairwise(f):
newdata[line1.strip()] = line2.strip()
注意str.strip()
调用,以删除任何额外的空格(包括每行末尾的换行符)。
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
for line1, line2 in zip(*[iter(f)]*2):
newdata[line1] = line2
或者
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
newdata = dict(zip(*[iter(f)]*2))