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的关键错误以及我可以做些什么呢?
感谢。
答案 0 :(得分: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实现,请参阅this answer。
答案 1 :(得分:1)
尤其是defaultdict的主要优点,它将捕获Keyerror并将作为参数传递的函数调用到defaultdict。但OrderedDict用于不同的目的。
如果新的dataStrcture结合了这两种功能将是有益的。此外,使用userDict()必须能够实现这样的功能。
您可以参考我关于Python集合的文章
https://techietweak.wordpress.com/2015/11/11/python-collections/
希望这有帮助。