Python:解压缩的值太多(字典)

时间:2013-08-06 15:47:11

标签: python dictionary 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 个答案:

答案 0 :(得分:0)

您正在读取所有行,并将第一行(序列)分配给两个变量。仅当第一行包含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()次调用,删除任何额外的空格(包括每行末尾的换行符)。

答案 1 :(得分:0)

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))