dict函数的一些问题

14 投票
3 回答
33318 浏览
提问于 2025-04-16 17:14

我正在尝试用 dict 函数把一个列表转换成字典。

inpu = input.split(",")
dic = dict(inpu)

上面的代码是想获取一个字符串,然后用 split 方法把它按 ',' 分开,之后我再用 dict 函数把这个列表转换成字典。

但是,我遇到了这个错误:

ValueError: 字典更新序列的第0个元素长度为6;需要的是2

有人能帮忙吗?

3 个回答

0

字典就是一种包含键和值的配对关系,所以它需要长度为2的列表来对应键和值。你把输入分成了一个平坦的列表,这就是为什么Python在这个情况下会报错——它不知道该把什么当作键,什么当作值。

3

Python 数据结构的文档中提到,dict()这个构造函数可以直接从存储为元组的键值对列表中创建字典。

所以,你输入的数组每个位置都必须是这种形式:('key', 'value'),比如说:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

你的输入数组的大小可能大于2。

21

dict 这个东西需要你给它一个包含两个元素的容器,比如一个元组的列表。你不能直接给它一个只包含项的列表,因为它不知道哪个是键,哪个是值。

你现在想做的是这个:

>>> range(10)
<<< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> dict(range(10))
---------------------------------------------------------------------------
TypeError: cannot convert dictionary update sequence element #0 to a sequence

dict 需要的是像这样的列表:

>>> zip(lowercase[:5], range(5))
<<< 
[('a', 0),
 ('b', 1),
 ('c', 2),
 ('d', 3),
 ('e', 4)]

元组中的第一个元素会变成键,第二个元素会变成值。

>>> dict(zip(lowercase[:5], range(5)))
<<< 
{'a': 0,
 'b': 1,
 'c': 2,
 'd': 3,
 'e': 4}

撰写回答