可以根据另一个字典项设置字典值吗?
这是我的想法:
dict1 = {key1:3, key2:5, key3:key1+key2}
# so key3 relate to the value: 8 (3+5)
dict1.update({key2:6})
# key3 will now relate to the value: 9 (3+6)
我想尽量避免更新不必要的条目,同时也不想建立新的键值关系,这些关系是基于已经通过一系列查找和更新计算出来的值,并且在比较这些关系的值时使用。字典的可哈希性对我来说非常重要,这样我在查找时才能保持相对恒定的时间。
2 个回答
0
你可以通过创建一个字典(dict
)的子类,并重写(也就是修改)__getitem__
这个方法来实现这个功能:
class My_dict(dict):
def __getitem__(self, key):
if key == 'key3':
return self['key1'] + self['key2']
return dict.__getitem__(self, key)
dict1 = My_dict(key1=3, key2=5)
print dict1['key3'] #prints 8
dict1.update({'key2':6})
print dict1['key3'] #prints 9
7
这不是一个通用的解决方案,但大致上适用于你的例子:
class DynamicDict(dict):
def __getitem__(self, key):
value = super(DynamicDict, self).__getitem__(key)
return eval(value, self) if isinstance(value, str) else value
>>> d = DynamicDict(key1=3, key2=5, key3='key1+key2')
>>> d.update({'key2': 6})
>>> d['key3']
9