简化我的字典:
my_dict = {
'DOC': [
[('k', 'v'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')],
[('k5', 'v5'), ('k', 'v'), ('k1', 'v1'), ('k6', 'v6')]
],
'DIC': [
[('k7', 'v7'), ('k3', 'v3'), ('k8', 'v8')],
[('k5', 'v5'), ('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')],
[('k4', 'v4'), ('k9', 'v9')]
],
'INFRA': [
[('k5', 'v5'), ('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')],
[('k', 'v'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')]
]
}覆盖我的字典值:
for k, v in my_dict.items():
my_dict[k] = map(lambda x: dict(x), my_dict[k])回来..。
my_dict
{'DIC': [{'k3': 'v3', 'k7': 'v7', 'k8': 'v8'},
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k5': 'v5'},
{'k4': 'v4', 'k9': 'v9'}],
'DOC': [{'k': 'v', 'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'},
{'k': 'v', 'k1': 'v1', 'k5': 'v5', 'k6': 'v6'}],
'INFRA': [{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k5': 'v5'},
{'k': 'v', 'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}]}当我按照相同的逻辑运行我的真实代码时,我得到了错误:
ValueError:字典更新序列元素#0的长度为6;2是必需的
我尝试创建另一个字典来接收map(),但同样的错误也发生了。有人能帮我吗?
发布于 2012-08-13 19:35:30
dict构造函数需要一个由2项子序列(列表或元组)组成的序列。至少一个子序列包含两个以上的项。
也许您缺少逗号(见最后一项):
>>> dict([('1', 'red'),('2', 'blue'),('3' 'purple')]) # missing comma in last item
Traceback (most recent call last):
File "<pyshell#166>", line 1, in <module>
dict([('1', 'red'),('2', 'blue'),('3' 'purple')])
ValueError: dictionary update sequence element #2 has length 7; 2 is required或者可能是单个项而不是元组(同样,请参见最后一项)
>>> dict([('1', 'red'),('2', 'blue'),('purple')]) # last "tuple" has one item
Traceback (most recent call last):
File "<pyshell#167>", line 1, in <module>
dict([('1', 'red'),('2', 'blue'),('purple')])
ValueError: dictionary update sequence element #2 has length 6; 2 is required发布于 2012-08-13 19:32:59
真实测试用例中的输入不符合您预期的结构。尤其是,至少有一个元素不是元组,而是长度为6的序列。例如,错误的输入看起来可能如下:
{'DOC': [
[('123456')], # A string is a sequence, too
[('123' '456')] # Note the lack of a comma
[('1','2','3','4','5','6')] # A tuple, but with 6 elements
[['1','2','3','4','5','6']] # A list
]}要解决这个问题,请检查您的输入,例如:
for k, v in my_dict.items():
for l in v:
for subl in v:
for tup in subl:
if not len(tup) == 2:
raise ValueError('In %r: value is not a tuple(2), but %r'
% (k, tup))哦,顺便说一下,在设计数据结构时,遵循Python的禅宗通常是个好主意,这包括:
平比嵌套好。
发布于 2012-08-13 19:43:16
问题是,在“真正的代码”中,列表中的第一个元素有两个以上的元素(6)。dict需要两个才能将它们解释为key, value。
下面是一个生成您描述的错误的示例:
my_dict = {
'DOC': [
[('k', 'v', 'extra1', 'extra2', 'extra3', 'extra4'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')],
[('k5', 'v5'), ('k', 'v'), ('k1', 'v1'), ('k6', 'v6')]
],
'DIC': [
[('k7', 'v7'), ('k3', 'v3'), ('k8', 'v8')],
[('k5', 'v5'), ('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')],
[('k4', 'v4'), ('k9', 'v9')]
],
'INFRA': [
[('k5', 'v5'), ('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')],
[('k', 'v'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')]
]
}下面是一种简单的方法,可以插入print语句来查看问题元素:
for k, v in my_dict.items():
# Print out the first element of each list,
# because one of them has six elements when it should only have two.
for l in my_dict[k]:
print l[0]
my_dict[k] = map(lambda x: dict(x), my_dict[k])https://stackoverflow.com/questions/11940913
复制相似问题