dict理解失败-没有足够的值可解压

时间:2018-08-28 08:55:27

标签: python dictionary iterable-unpacking

我想从字符串列表中创建字典:

print(l)
print(l[0])                            # 1st string in list
print(l[0].split(',',1))
print(len(l[0].split(',',1)))
d = {int(k):v for k,v in l[0].split(',',1)}

['0,[7,2,5,7]', '1,[7,18,6,2]']
0,[7,2,5,7]
['0', '[7,2,5,7]']
2

但是,我得到d = {int(k):v for k,v in l[0].split(',',1)} ValueError: not enough values to unpack (expected 2, got 1)

我不明白为什么,因为l[0].split(',',1)返回2个值,从以前的检查中可以看出(print(len(l[0].split(',',1)))返回2)

我想要的输出:

d = {0 : [7,2,5,7]}

1 个答案:

答案 0 :(得分:1)

它返回两个值,但是循环需要两个值的列表。

您有这个:[x, y]

但是代码期望这样:[[x, y]]

您可以这样做:

from itertools import repeat
items = map(str.split, l, repeat(','), repeat(1))
d = {int(k):v for k,v in items}

请注意,您将获得所有数据,而不仅仅是一项。

您可能要使用ast.literal_eval来解析列表,因为当前它是一个字符串:

import ast
from itertools import repeat
items = map(str.split, l, repeat(','), repeat(1))
d = {int(k):ast.literal_eval(v) for k,v in items}