阅读this question后,我注意到S. Lott可能喜欢使用“有序的defaultdict”,但它不存在。现在,我想知道:为什么我们在Python中有这么多的dict类?
为什么不这样,
dict(initializer=[], sorted=False, ordered=False, default=None,
weak_keys=False, weak_values=False)
统一一切,并提供一切有用的组合?
答案 0 :(得分:12)
一个问题是,由于现在存在这种类型的构造函数,进行此更改会破坏向后兼容性:
>>> dict(one=1, two=2)
{'two': 2, 'one': 1}
答案 1 :(得分:8)
这些额外的选项不是免费的。由于99.9%的Python构建在dict
之上,因此非常非常重要,以使其尽可能最小和最快。
答案 2 :(得分:4)
因为实施方式有很大差异。你基本上会得到一个dict
工厂,它返回一个_dict
的实例(一个非常快速,低开销的字典 - 当前dict
),ordereddict
, defaultdict
,...类。此外,您无法再使用关键字参数初始化字典;依赖于此的程序将失败:
>>> dict(sorted=42)
{'sorted': 42}
# Your proposal would lead to an empty dictionary here (breaking compatibility)
此外,当它合理时,各种类已经相互继承:
>>> collections.defaultdict.__bases__
(<type 'dict'>,)
答案 3 :(得分:0)
这就是为什么语言有“mixins”。
你可以通过定义正确的一堆类来尝试发明类似的东西。
class defaultdict( dict, unordered, default_init ): pass
class OrderedDict( dict, ordered, nodefault_init ): pass
class WeakKeyDict( dict, ordered, nodefault_init, weakkey ): pass
class KeyValueDict( dict, ordered, nodefault_init, weakvalue ): pass
然后,一旦你有了这些“统一”的词典,你的应用程序就像这样
groups= defaultdict( list )
该应用没有真正的变化,是吗?