为什么Python字典不统一?

13 投票
4 回答
535 浏览
提问于 2025-04-16 20:58

在阅读了这个问题后,我注意到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),还有 ordereddictdefaultdict 等等类。此外,你也不能再用关键字参数来初始化字典了;依赖这个功能的程序会出错:

>>> 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}

撰写回答