我尝试重写以下代码来理解字典,只是为了好玩:
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)
我想替换这一行:
^{pr2}$有了更好的字典理解功能,它可能看起来像:
entity = {key: value for p in props for key, value in p.split('=')}
当我尝试这样做时,我得到以下错误:
ValueError: too many values to unpack (expected 2)
我做错什么了?使用ipdb.pm()
我发现p是name=yam
,这很好,但是key
和{
你不能这样做:
因为这要求
p.split()
调用的每个结果都必须有两个元素。相反,您只需要一个长度可变的单个(字符串)元素序列。在您必须先将
^{pr2}$p.split()
包装成另一个iterable:所以现在不是:
你会得到:
它只迭代一次,提供两个要解包的值。在
但是,您可以在这里使用
dict()
调用;它直接使用(key, value)
对的iterable:您还应尽量避免将整个文件读入内存,您可以直接将文件用作iterable:
相关问题 更多 >
编程相关推荐