python - python 映射中的派生值

标签 python function dictionary

我不确定这个问题是否可能,但无论如何都要问,假设我有一些字典:

 my_dict = {'a':0, 'b':1}

我希望一些键“c”等于(在这个简单的情况下)值a+b,这样如果我要更新字典:

my_dict['a'] = 2

然后调用:

my_dict['c']

将返回 3 (a=2 + b=1)

我找不到任何简单的方法,也许是 lambda 函数,但这似乎不对。每当我想要 a 和 b 的总和时,这将很有用,我不必显式地将它们取出并相加。

编辑:感谢您的快速回复,这将适用于一个类,如果我总是知道值 C 我想要执行某些功能,但我希望能够动态定义该函数,让我们在 my_dict 中说我希望 'c' 为 a+b 但在其他 my_dict_2 中我希望键 'b' 为 (key='a' * 52)/3 (或其他一些基本数学运算。在下面的解决方案中,我必须继续重写类(class),但我不想这样做。有什么想法吗?

最佳答案

子类dict并覆盖__getitem__魔术函数:

class SumDict(dict):
    SUM_KEY = 'c'

    def __getitem__(self, key):
        if key == self.SUM_KEY:
            return sum(self.values())
        return super(SumDict, self).__getitem__(key)

    def __setitem__(self, key, val):
        if key == self.SUM_KEY:
            raise KeyError('{} key is reserved'.format(key))
        super(SumDict, self).__setitem__(key, val)

--

>>> d = SumDict({'x': 1, 'y': 2, 'z': 3})
>>> print(d['c'])
6

>>> d['c'] = 10
KeyError: 'c key is reserved'

关于python - python 映射中的派生值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614738/

相关文章:

python - 将键=值对转换回 Python 字典

python - BeautifulSoup 无法解析内容,因为页面加载速度太慢

python - 错误 : Directory is not installable. 既不是 'setup.py' 也不是 'pyproject.toml'

python - 如何将一个函数的输出作为输入传递给另一个函数?

C: 如果没有单独的功能,代码将无法工作。为什么?

javascript - 如何得到这个输出? JavaScript ES6

python - 如何将词典列表输出到 Excel 工作表?

python - 在 Keras (tensorflow) 中合并多个模型

python - 根据python中的条件添加前导零

c# - 如何在委托(delegate)中使用字典