我一直在尝试整个下午定义几个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),
]),
)])
)])
运行此命令返回:
$ 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
最终目标是尝试合并这两个嵌套对象,但是现在我甚至难以定义它们!
答案 0 :(得分:4)
对[{1}}使用list
输入时,预计其形式为association list,例如OrderedDict
。
我们只考虑[(key1, val1), (key2, val2), ...]
。对于此personA
,您可以使用OrderedDict
作为关键字{/ 1}}正确开始,
list
作为价值。
但请注意,您不会在该值之后给出右括号。相反,您只给出一个逗号,然后开始构造函数列表中的下一个键值条目。
所以第一个问题是在第一个键值对结束后需要额外的u'score'
才能使它成为2元组。
接下来,当你从第二个键值对开始时,你开始使用全新的OrderedDict([(u'2015-09-09 03:40:33 +0100', 2646),
(u'2015-09-10 03:35:34 +0100', 2646),
])
,但这不是你想要的。你想要的是)
是一个关键的,在一个2元素的键值元组中。进行此更改还可以让您摆脱一组冗余的结束分隔符。
总的来说,它将是:
OrderedDict
您看到的特定错误消息是由于在原始代码中,传递给u'adjusted_score'
构造函数的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)]))])
内部的tuple
总体上只有2个当列表中的“关联”不仅仅包含预期的两个元素(键和值)时,list
的内部构造函数逻辑不知道如何处理“关联列表”作为输入。
答案 1 :(得分:1)
外部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),
])),
])