OrderedDict 的(不)可变性

Posted

技术标签:

【中文标题】OrderedDict 的(不)可变性【英文标题】:(Im)mutability of OrderedDict 【发布时间】:2021-12-28 07:54:36 【问题描述】:

Python 的OrderedDict 数据结构是可变集合吗?

documentation对此没有说什么,在网上快速搜索后,我还没有找到任何答案。

【问题讨论】:

【参考方案1】:

文档没有说任何关于它的内容,并且在快速之后 在网上搜索,我还没有找到任何答案。

当您对类的可变性有疑问时,您可以运行以下测试

from collections import OrderedDict
from collections.abc import MutableSequence, MutableSet, MutableMapping
print(issubclass(OrderedDict,(MutableSequence,MutableSet,MutableMapping)))

输出

True

请参阅 collections.abc 文档中的 Collections Abstract Base Classes 了解可以通过这种方式检查的其他内容。

【讨论】:

【参考方案2】:

OrderedDict 是可变的:

from collections import OrderedDict

d = OrderedDict.fromkeys('abcde')
d['a']= 'aretor'
print(d)

>> OrderedDict([('a', 'aretor'), ('b', None), ('c', None), ('d', None), ('e', None)])

print(d['a'])
>> aretor

【讨论】:

【参考方案3】:

来自realpython.com:

由于 OrderedDict 是一个可变数据结构,你可以执行 对其实例进行变异操作。您可以插入新项目,更新 并删除现有项目,等等。如果您将新项目插入 现有的有序字典,然后将该项目添加到 字典:

他们提供了几个可变操作的例子,比如插入:

>>> from collections import OrderedDict

>>> numbers = OrderedDict(one=1, two=2, three=3)
>>> numbers
OrderedDict([('one', 1), ('two', 2), ('three', 3)])

>>> numbers["four"] = 4
>>> numbers
OrderedDict([('one', 1), ('two', 2), ('three', 3), ('four', 4)])

一般来说,如果一个数据类型支持以下operations,那么它就被认为是一个可变序列类型。

【讨论】:

以上是关于OrderedDict 的(不)可变性的主要内容,如果未能解决你的问题,请参考以下文章

Python OrderedDict使用

在 Python 3 中获取“OrderedDict”第一项的最短方法

python之OrderedDict类

Python中的OrderedDict

python嵌套字典:集合中的OrderedDict

Python OrderedDict使用