Python &引用;字典更新序列元素#0的长度为4;2是必需的“;
尝试使用元组更新字典时,遇到错误: dict1.update((“stat”,10))Python &引用;字典更新序列元素#0的长度为4;2是必需的“;,python,dictionary,Python,Dictionary,尝试使用元组更新字典时,遇到错误: dict1.update((“stat”,10)) ValueError:字典更新序列元素#0的长度为4;2是必需的 事实上,这不应该发生。从python文档中 update()接受另一个dictionary对象或键/值对的iterable(作为元组或其他长度为2的iterable) 这毫无意义,因为我提供的元组的长度显然是2 >len((“stat”,10)) 2 发生了什么事?这是一个尚未解决的错误吗?运行Python 3.8.0 还是因为我的字典是空的?
ValueError:字典更新序列元素#0的长度为4;2是必需的
事实上,这不应该发生。从python文档中
update()接受另一个dictionary对象或键/值对的iterable(作为元组或其他长度为2的iterable)
这毫无意义,因为我提供的元组的长度显然是2
>len((“stat”,10))
2
发生了什么事?这是一个尚未解决的错误吗?运行Python 3.8.0
还是因为我的字典是空的?用其他字符串和值尝试了这个方法,同样的问题。文档中说“或键/值对的iterable(如元组或长度为2的其他iterable)”
因此,您需要传递一个长度为2的元组的元组
试试这个:
dict1.update((("stat",10),))
也可以按如下方式传递多个键/值对:
dict1.update((("stat",10), ('foo', 'bar'), ('buzz', 'fizz')))
文档中说您需要一个键值对的iterable。单个元组不是键值对的iterable,列表或元组的元组都可以
dict1.update([(“stat”,10)])
在元组末尾添加一个dict1.update(((“stat”,10),)
或者传递一个列表
dict1.update([(“stat”,10)])
我知道这个修复方法。但是我不想仅仅为了解决这个问题而建立一个临时字典。构建元组的速度更快。我也很好奇这个问题/bug的起源。试试dict1.update({“stat”:10})
问题是它需要一个可数对,但是你直接传递了一对;缺少数据结构的一个级别。您需要将该级别的数据结构放入,或者是dict1.update(((“stat”,10),)
,这是成对的元组,或者dict1.update([(“stat”,10)])
,这是成对的列表。找到的长度是字符串“stat”的长度奇怪的是,它不能只处理一个元组。所以一个2长度的元组就永远不会工作了?这是有问题的,因为我必须一个接一个地添加每个值,因为我在一个循环中。我发现另一个线程解释了同样的事情:对于一个元组,你需要在它后面加一个逗号:dict1.update(((“stat”,10),)
@sabik谢谢你的解释。我只是想通过传递多对元组来展示传递元组的概念。哪个更快?一个新的、临时的字典或元组的元组。逻辑上,元组应该更快,但我可能错了元组应该更快,使用更少的内存。我怀疑速度/内存的差异将是最小的,在绝大多数情况下肯定不值得担心。