使用单个键将字典排序为OrderedDict

时间:2014-11-20 13:08:03

标签: python python-3.x dictionary

我正在尝试编写一些创建排序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
>>> 

当然,我意识到我可以检查字典中的键数并且表现得恰当。但是,我想检查一下我是否在做错了什么,因为看起来它应该有效。是否有更好/更合适的方法来做到这一点?

1 个答案:

答案 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)])