【发布时间】:2017-12-05 11:05:35
【问题描述】:
我尝试重写以下代码以使用字典理解,只是为了好玩:
import itertools
with open('foo.txt') as f:
entities = f.read().splitlines()
parsed_entities = []
while entities:
props = itertools.takewhile(lambda n: n != 'EOM', entities)
entity = {p.split('=')[0]: p.split('=')[1] for p in props}
entities = entities[len(entity)+2:] # Delete and skip EOM & newline
parsed_entities.append(entity)
我想替换这一行:
entity = {p.split('=')[0]: p.split('=')[1] for p in props}
具有更好看的字典理解,可能如下所示:
entity = {key: value for p in props for key, value in p.split('=')}
当我尝试这样做时,我收到以下错误:
ValueError:解包的值太多(预计 2 个)
我做错了什么?使用ipdb.pm()我看到p是name=yam,这很好,但是key和value是未定义的。
【问题讨论】:
-
我认为
p.split('=')的长度不是2。 -
@SamChats:确实如此。但
p.split('=')[0]不是,这就是正在解包的内容。 -
@SamChats,检查一下。我用
print(len(p.split('=')))替换了p.split('='),是2。 -
@MartijnPieters 明白了。很有见地:)
标签: python python-3.x dictionary dictionary-comprehension