首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:要解压缩的值太多(字典)

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

Stack Overflow用户
提问于 2013-08-06 23:47:11
回答 2查看 876关注 0票数 0

我试图通过将文本文件中的两行和两行配对来将键值对添加到字典中。为什么这不起作用?

代码语言:javascript
复制
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
f = open(filename)
for line1, line2 in f.readlines():
    newdata[line1] = line2

编辑:我得到的错误是

代码语言:javascript
复制
ValueError: too many values to unpack
EN

回答 2

Stack Overflow用户

发布于 2013-08-06 23:51:38

您正在读取所有行,并将第一行(一个序列)赋给两个变量。仅当第一行包含2个字符时才有效。改用文件作为迭代器:

代码语言:javascript
复制
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    for line1 in f:
        newdata[line1.strip()] = next(f, '').strip()

在这里,next()从文件中读取下一行。

另一种方法是使用成对食谱:

代码语言:javascript
复制
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()调用,以删除任何额外的空格(包括每行末尾的换行符)。

票数 0
EN

Stack Overflow用户

发布于 2013-08-06 23:54:15

代码语言:javascript
复制
newdata = {}
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    for line1, line2 in zip(*[iter(f)]*2):
        newdata[line1] = line2

代码语言:javascript
复制
os.chdir("//GOLLUM//tbg2//tbg2//forritGB")
with open(filename) as f:
    newdata = dict(zip(*[iter(f)]*2))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18084740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档