我的列表如下:
data = ['a:b', 'c:d', 'e:f', 'g:h']
从中我必须创建字典。
xx = [i.split(":") for i in data]
d = {k:v for k,v in xx}
这种方式可行但是当我试图将它放在一行时,出现错误,解压缩的价值太高。
d = {k:v for i in data for k,v in i.split(":")}
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 1, in <dictcomp>
ValueError: too many values to unpack
是不是因为我们无法在右侧添加操作语句(如拆分)。这项任务还有其他优化方式吗?
答案 0 :(得分:1)
你不能for k, v in i.split(":")
,因为这只适用于可迭代的返回元素对(例如dict.items()
),而split()
会返回一个平面列表。您需要为split()
部分使用列表推导或生成器表达式:
>>> {k: v for k, v in (i.split(":") for i in data)}
{'a': 'b', 'c': 'd', 'e': 'f', 'g': 'h'}
或者只使用dict()
构造函数:
>>> dict(i.split(":") for i in data)
{'a': 'b', 'c': 'd', 'e': 'f', 'g': 'h'}