可以根据另一个字典项设置字典值吗?

7 投票
2 回答
3441 浏览
提问于 2025-04-17 22:45

这是我的想法:

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

撰写回答