¿Puede establecer un valor de diccionario dependiendo de otra entrada de diccionario?

Aquí está el pensamiento:

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) 

Estoy tratando de evitar actualizar más entradas de las necesarias, así como crear nuevas relaciones de clave-valor basadas en valores que ya se han calculado en una serie de búsquedas y actualizaciones al comparar valores de relaciones. La capacidad de hash del diccionario es crucial para obtener un tiempo más o menos constante en la búsqueda.

Esto no es una solución general, pero funciona más o menos para tu ejemplo:

 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 

Puedes hacer esto creando una subclase de dict y anulando el método __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