我有一个嵌套的 OrderedDict
我想转换为 dict
。在其上应用 dict()
显然只会转换最后一个条目的最外层。
from collections import OrderedDict
od = OrderedDict(
[
(u'name', u'Alice'),
(u'ID', OrderedDict(
[
(u'type', u'card'),
(u'nr', u'123')
]
)),
(u'name', u'Bob'),
(u'ID', OrderedDict(
[
(u'type', u'passport'),
(u'nr', u'567')
]
))
]
)
print(dict(od))
输出:
{u'name': u'Bob', u'ID': OrderedDict([(u'type', u'passport'), (u'nr', u'567')])}
有没有直接的方法来转换所有的事件?
原文由 WoJ 发布,翻译遵循 CC BY-SA 4.0 许可协议
您应该利用 Python 的内置
copy
机制。您可以通过 Python 的
copyreg
模块(也被pickle
使用)覆盖OrderedDict
的复制行为。然后你可以使用 Python 的内置copy.deepcopy()
函数来执行转换。仅通过使用 Python 的内置复制基础结构,该解决方案就优于此处提供的所有其他答案,具体表现在以下方面:
不仅仅适用于 JSON 数据。
不需要您为每种可能的元素类型实现特殊逻辑(例如
list
,tuple
等)deepcopy()
将正确处理集合中的重复引用:由于我们的解决方案基于
deepcopy()
我们将拥有相同的优势。OrderedDict
的 _属性_,而不仅仅是集合元素: