python - 具有固定和有序键的可变字典

标签 python dictionary

我正在使用 OrderedDict 来存储一些重要数据。我想确保不小心向该字典插入新键会引发异常,但我希望字典是可变的。我想要修复 key (在 __init__ 中创建之后)。是否可以通过某些图书馆类(class)来做到这一点?还是我必须以某种方式为此实现新的有序类?

示例:

d = FixedOrderedDict( ( ("A", 1), ("B", 2) ) )

print d["A"]
# 1
d["A"] = 11
print d["A"]
# 11
d["C"] = 33
# throws exception

有人建议我查找名为 FrozenDict 的解决方案,但它使 dict 只读 - 无法修改值(分配新值时抛出异常)。这不是我想要实现的。

最佳答案

我不知道标准库中有这样的解决方案(这是一个相当专业的用例)。但是,您可以使用 collections.MutableMapping (3.3 及以后版本中的 collections.abc.MutableMapping)免费获得大部分功能。给出或考虑一些我现在可能忽略的小问题,它只是:

from collections import MutableMapping, OrderedDict

class FixedOrderedDict(MutableMapping):
    def __init__(self, *args):
        self._d = OrderedDict(*args)

    def __getitem__(self, key):
        return self._d[key]

    def __setitem__(self, key, value):
        if key not in self._d:
            raise KeyError("Must not add new keys")
        self._d[key] = value

    def __delitem__(self, key):
        raise NotImplementedError("Must not remove keys")

    def __iter__(self):
        return iter(self._d)

    def __len__(self):
        return len(self._d)

关于python - 具有固定和有序键的可变字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24763464/

相关文章:

python - Scrapy,从页面解析项目数据,然后按照链接获取其他项目数据

python - 有没有办法更好地写这些ifs?

python - 如何使用一些规则将一些纯文本输出转换为 JSON?

Python检查字典是否是其他字典的一部分

python - 如何遍历这个字典

没有导入调用的python ImportError

python - 从管理命令调用 View

javascript - 如何从 JSON 对象中获取匹配的键值?

java - 字典作为类的不同实例的引用

class - Haxe - 将字符串映射到类