Error defining an OrderedDict - ValueError: too many values to unpack
Error defining an OrderedDict - ValueError: too many values to unpack
我整个下午都在尝试定义几个 OrderedDict
对象,但收到 ValueError
消息。
from collections import OrderedDict
personA = OrderedDict([(u'score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
]),
OrderedDict([(u'adjusted_score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
])
)])
)])
personB = OrderedDict([(u'score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 4646),
(u'2015-09-12 03:35:34 +0100', 4646),
]),
OrderedDict([(u'adjusted_score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 5646),
(u'2015-09-12 03:35:34 +0100', 5646),
]),
)])
)])
运行 这个 returns:
$ python ordereddict.py
Traceback (most recent call last):
File "ordereddict.py", line 23, in <module>
(u'2015-09-10 03:35:34 +0100', 3646),
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/collections.py", line 52, in __init__
self.__update(*args, **kwds)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py", line 547, in update
for key, value in other:
ValueError: too many values to unpack
最终目标是尝试合并这两个嵌套对象,但现在我什至无法定义它们!
当使用 list
输入到 OrderedDict
时,它应该是 association list 的形式,例如 [(key1, val1), (key2, val2), ...]
.
让我们考虑一下 personA
。对于这个 OrderedDict
,您可以正确地从 list
以 u'score'
作为键和
开始
OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])
作为值。
但请注意,您没有在该值后加上右括号。相反,您只给出一个逗号,然后从构造函数列表中的下一个 key-value 条目开始。
所以第一个问题是您需要在第一个 key-value 对结束后添加一个额外的 )
,使它成为一个 2 元组。
接下来,当您从第二对 key-value 开始时,您会从全新的 OrderedDict
开始,但这不是您想要的。你想要的是 u'adjusted_score'
成为 2 元素 key-value 元组内的键。进行此更改还可以让您摆脱一组冗余的结束定界符。
总的来说是:
In [10]: personA = OrderedDict([
(u'score',
OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])
), # <-- this was missing for 2-tuple
(u'adjusted_score',
OrderedDict([(u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
])
)
] # <-- Closes the list passed in the constructor
) # <-- Closes the open parenthesis from the "OrderedDict(" constructor.
In [11]: personA
Out[11]: OrderedDict([(u'score', OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646), (u'2015-09-10 03:35:34 +0100', 2646)])), (u'adjusted_score', OrderedDict([(u'2015-09-09 03:40:33 +0100', 3646), (u'2015-09-10 03:35:34 +0100', 3646)]))])
您看到的特定错误消息是由于在您的原始代码中,传递给 OrderedDict
构造函数的 list
内部的整体 tuple
超过只有 2 个元素,并且 OrderedDict
的内部构造函数逻辑不知道如何处理 "association list" 作为输入,当列表中的 "associations" 不仅仅是预期的两个元素(关键和价值)。
外面的 OrderedDict
没有给出配对列表。您正在传递 3 元组。尝试
from collections import OrderedDict
personA = OrderedDict([
(u'score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])),
(u'adjusted_score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
]))
])
personB = OrderedDict([
(u'score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 4646),
(u'2015-09-12 03:35:34 +0100', 4646),
])),
(u'adjusted_score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 5646),
(u'2015-09-12 03:35:34 +0100', 5646),
])),
])
我整个下午都在尝试定义几个 OrderedDict
对象,但收到 ValueError
消息。
from collections import OrderedDict
personA = OrderedDict([(u'score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
]),
OrderedDict([(u'adjusted_score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
])
)])
)])
personB = OrderedDict([(u'score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 4646),
(u'2015-09-12 03:35:34 +0100', 4646),
]),
OrderedDict([(u'adjusted_score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 5646),
(u'2015-09-12 03:35:34 +0100', 5646),
]),
)])
)])
运行 这个 returns:
$ python ordereddict.py
Traceback (most recent call last):
File "ordereddict.py", line 23, in <module>
(u'2015-09-10 03:35:34 +0100', 3646),
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/collections.py", line 52, in __init__
self.__update(*args, **kwds)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py", line 547, in update
for key, value in other:
ValueError: too many values to unpack
最终目标是尝试合并这两个嵌套对象,但现在我什至无法定义它们!
当使用 list
输入到 OrderedDict
时,它应该是 association list 的形式,例如 [(key1, val1), (key2, val2), ...]
.
让我们考虑一下 personA
。对于这个 OrderedDict
,您可以正确地从 list
以 u'score'
作为键和
OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])
作为值。
但请注意,您没有在该值后加上右括号。相反,您只给出一个逗号,然后从构造函数列表中的下一个 key-value 条目开始。
所以第一个问题是您需要在第一个 key-value 对结束后添加一个额外的 )
,使它成为一个 2 元组。
接下来,当您从第二对 key-value 开始时,您会从全新的 OrderedDict
开始,但这不是您想要的。你想要的是 u'adjusted_score'
成为 2 元素 key-value 元组内的键。进行此更改还可以让您摆脱一组冗余的结束定界符。
总的来说是:
In [10]: personA = OrderedDict([
(u'score',
OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])
), # <-- this was missing for 2-tuple
(u'adjusted_score',
OrderedDict([(u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
])
)
] # <-- Closes the list passed in the constructor
) # <-- Closes the open parenthesis from the "OrderedDict(" constructor.
In [11]: personA
Out[11]: OrderedDict([(u'score', OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646), (u'2015-09-10 03:35:34 +0100', 2646)])), (u'adjusted_score', OrderedDict([(u'2015-09-09 03:40:33 +0100', 3646), (u'2015-09-10 03:35:34 +0100', 3646)]))])
您看到的特定错误消息是由于在您的原始代码中,传递给 OrderedDict
构造函数的 list
内部的整体 tuple
超过只有 2 个元素,并且 OrderedDict
的内部构造函数逻辑不知道如何处理 "association list" 作为输入,当列表中的 "associations" 不仅仅是预期的两个元素(关键和价值)。
外面的 OrderedDict
没有给出配对列表。您正在传递 3 元组。尝试
from collections import OrderedDict
personA = OrderedDict([
(u'score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])),
(u'adjusted_score',
OrderedDict([ (u'2015-09-09 03:40:33 +0100', 3646),
(u'2015-09-10 03:35:34 +0100', 3646),
]))
])
personB = OrderedDict([
(u'score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 4646),
(u'2015-09-12 03:35:34 +0100', 4646),
])),
(u'adjusted_score',
OrderedDict([ (u'2015-09-11 03:40:33 +0100', 5646),
(u'2015-09-12 03:35:34 +0100', 5646),
])),
])