from collections import ChainMap
class DeepChainMap(ChainMap):
def __getitem__(self, key):
values = (mapping[key] for mapping in self.maps if key in mapping)
try:
first = next(values)
except StopIteration:
return self.__missing__(key)
if isinstance(first, dict):
return self.__class__(first, *values)
return first
def __repr__(self):
return repr(dict(self))
a = {'123': {'player': 1,
'opponent': 2},
'18': {'player': 10,
'opponent': 12}
}
b = {'123': {'winner': 1},
'180': {'winner': 2}
}
print(DeepChainMap(a, b))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ2hhaW5NYXAKCmNsYXNzIERlZXBDaGFpbk1hcChDaGFpbk1hcCk6CiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICB2YWx1ZXMgPSAobWFwcGluZ1trZXldIGZvciBtYXBwaW5nIGluIHNlbGYubWFwcyBpZiBrZXkgaW4gbWFwcGluZykKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZpcnN0ID0gbmV4dCh2YWx1ZXMpCiAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9fbWlzc2luZ19fKGtleSkKICAgICAgICBpZiBpc2luc3RhbmNlKGZpcnN0LCBkaWN0KToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKGZpcnN0LCAqdmFsdWVzKQogICAgICAgIHJldHVybiBmaXJzdAoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gcmVwcihkaWN0KHNlbGYpKQoKYSA9IHsnMTIzJzogeydwbGF5ZXInOiAxLAogICAgICAgICAgICAgJ29wcG9uZW50JzogMn0sCiAgICAgJzE4JzogeydwbGF5ZXInOiAxMCwKICAgICAgICAgICAgJ29wcG9uZW50JzogMTJ9CiAgICB9CgoKYiA9IHsnMTIzJzogeyd3aW5uZXInOiAxfSwKICAgICAnMTgwJzogeyd3aW5uZXInOiAyfQogICAgfQoKcHJpbnQoRGVlcENoYWluTWFwKGEsIGIpKQ==