使用嵌套列表理解从列表创建dict

时间:2017-06-30 10:33:24

标签: python

我的列表如下: 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

是不是因为我们无法在右侧添加操作语句(如拆分)。这项任务还有其他优化方式吗?

1 个答案:

答案 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'}