为什么Python字典不统一?
在阅读了这个问题后,我注意到S. Lott可能想用一种“有序的默认字典”,但这种东西并不存在。现在,我在想:为什么Python里有这么多种字典类呢?
- 普通字典(dict)
- 排序字典(blist.sorteddict)
- 有序字典(collections.OrderedDict)
- 默认字典(collections.defaultdict)
- 弱引用键字典(weakref.WeakKeyDictionary)
- 弱引用值字典(weakref.WeakValueDictionary)
- 还有其他的吗?
为什么不搞一个这样的东西,
dict(initializer=[], sorted=False, ordered=False, default=None,
weak_keys=False, weak_values=False)
把所有的功能都整合在一起,提供每种有用的组合呢?
4 个回答
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'>,)
8
这些额外的选项可不是白来的。因为99.9%的Python都是基于dict
这个东西构建的,所以让它尽可能简单和快速是非常重要的。
12
一个问题是,进行这个更改会破坏向后兼容性,因为现在存在这种类型的构造函数使用方式:
>>> dict(one=1, two=2)
{'two': 2, 'one': 1}