Вы можете сэкономить один поиск на вызов, переписав __getitem__
как
try:
return self.d1[x]
except KeyError:
return self.d2[x]
. Это следует за пионической идиомой «просить прощения, а не разрешения».также думаю, что это быстрее, чем объединение словарей
Я сильно сомневаюсь в этом, но вы должны измерить, чтобы быть уверенным.Ваш подход вводит дополнительный уровень косвенности и требует многократного хеширования ключа.Это также обязательно займет больше памяти.
Редактировать : вот альтернативный подход.Замените один из ваших диктов на DictWithBackup
, который ведет себя как dict
, за исключением того, что когда ключ отсутствует, он смотрит на другой dict
.
class DictWithBackup(dict):
def __init__(self, backup):
self._backup = backup
def __missing__(self, key):
return self._backup[key]
В этих версиях исключена обработка исключений.