有没有办法更新 Python 字典的值,但如果键不存在,则不添加键?

时间:2021-01-20 17:06:22

标签: python python-3.x dictionary

我有一本这样的字典:

d = {'a': 1, 'b': 2, 'c': 3}

我想更新键 'c' 的值,并且可以使用 d['c'] = 30 来实现。

我想要的行为是只能更新现有密钥,而不是添加新密钥。如果我尝试执行 d['e'] = 4,我希望它抛出某种异常,而不是默认行为,即创建一个值为 'e' 的新键 4

是否有执行此类行为的函数?我知道我可以先检查 if 'e' in d,但再次检查是否有内置函数。

1 个答案:

答案 0 :(得分:2)

我不知道这种内置行为,但你总是可以实现你自己的字典:

class no_new_dict(dict):
    def __setitem__(self, key, value):
        if key in self:
            super().__setitem__(key, value)
        else:
            raise KeyError(key)

d = no_new_dict({'a': 1, 'b': 2, 'c': 3})
print(d)
d['c'] = 20
print(d)
d['d'] = 20

以上代码片段的输出将是:

{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 20}
Traceback (most recent call last):
  File "C:\Users\tomerk\PycharmProjects\pythonProject\test.py", line 12, in <module>
    d['d'] = 20
  File "C:\Users\tomerk\PycharmProjects\pythonProject\test.py", line 6, in __setitem__
    raise KeyError(key)
KeyError: 'd'