1
import collections

d = collections.defaultdict(dict)

d["i"]["a"] = "111"
d["i"]["b"] = "222"

print d

od = collections.OrderedDict()

od["i"]["a"] = "111"
od["i"]["b"] = "222"

print od

输出:

defaultdict(<type 'dict'>, {'i': {'a': '111', 'b': '222'}})
Traceback (most recent call last):
  File "app_main.py", line 51, in run_toplevel
  File "/Users/adam/Desktop/collections.py", line 12, in <module>
    od["i"]["a"] = "111"
KeyError: 'i'

为什么 OrderedDict 的关键错误以及我能做些什么?

谢谢。

4

2 回答 2

2

一个OrderedDict不也是一个defaultdict。你必须做这样的事情:

import collections
od = collections.OrderedDict()
od["i"] = collections.OrderedDict()
od["i"]["a"] = "111"
od["i"]["b"] = "222"
print od

输出:

OrderedDict([('i', OrderedDict([('a', '111'), ('b', '222')]))])

有关潜在的有序 ​​defaultdict 实现,请参阅此答案。

于 2013-03-07T23:11:00.350 回答
1

这就是 defaultdict 的主要优点,尤其是它会捕获 Keyerror 并调用作为参数传递给 defaultdict 的函数。但是 OrderedDict 用于不同的目的。

如果一个新的 dataStrcture 结合了这两种功能将是有益的。此外,使用 userDict() 必须可以实现这样的功能。

你可以参考我关于 Python Collections 的文章

https://techietweak.wordpress.com/2015/11/11/python-collections/

希望这可以帮助。

于 2015-11-27T07:03:14.013 回答