我正在尝试编写一些创建排序OrderedDict
的代码。代码将传递给它的无序dict
。不幸的是,当字典OrderedDict(sorted(x))
只有一个密钥时,x
似乎会爆炸:
>>> from collections import OrderedDict
>>> a = {"b": 1}
>>> OrderedDict(a)
OrderedDict([('b', 1)])
>>> sorted(a)
['b']
>>> OrderedDict(sorted(a))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/collections/__init__.py", line 56, in __init__
self.__update(*args, **kwds)
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_collections_abc.py", line 602, in update
for key, value in other:
ValueError: need more than 1 value to unpack
>>>
当然,我意识到我可以检查字典中的键数并且表现得恰当。但是,我想检查一下我是否在做错了什么,因为看起来它应该有效。是否有更好/更合适的方法来做到这一点?
答案 0 :(得分:2)
dict
/ OrderedDict
个对象的初始化程序需要一对可互换的key, val
对。
正如您在测试中清楚显示的那样,sorted(a)
是可迭代的,但不是对,因此ValueError: need more than 1 value to unpack
。
如果您想从sorted(a)
创建字典,则应该.fromkeys
:
>>> OrderedDict.fromkeys(sorted(a))
OrderedDict([('b', None)])
但我认为你真的想要:
>>> OrderedDict(sorted(a.items()))
OrderedDict([('b', 1)])