我不确定这个问题是否可能,但无论如何都要问,假设我有一些字典:
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/