是否有Python映射链?

| 在Python中,可以通过使用
itertools.chain
来懒惰地扩展列表:
L = itertools.chain(L1, L2)
是否有一个懒惰的地图“粘合”运算符?即
M = glue(M1, M2)
哪里
M[\'blah\']
退货
M1[\'blah\'] if \'blah\' in M1 else M2[\'blah\']
M
具有适合appropriate6ѭ和
values()
的发生器。     
已邀请:
Python 3.3添加了完全做到这一点的collections.ChainMap。     
可以直接构建一个类来表示针对一系列地图的惰性评估,并根据您的应用程序调整行为。例如:
from UserDict import DictMixin

class Map(object, DictMixin):
    def __init__(self, *maps):
        self.maps = maps
    def __getitem__(self, key):
        for m in self.maps:
            if key in m:
                return m[key]
    def keys(self):
        return list(self.iterkeys())
    def iterkeys(self):
        return (k for m in self.maps for k in m.iterkeys())
    def values(self):
        return list(self.itervalues())
    def itervalues(self):
        return (v for m in self.maps for v in m.itervalues())

def glue(*maps):
    return Map(*maps)

M1 = {\'blah\': 1}
M2 = {\'duh\': 2}

M = glue(M1, M2)
print M[\'blah\']
print M[\'duh\']
print list(M.keys())
print list(M.values())
输出:
1
2
[\'blah\', \'duh\']
[1, 2]
    

要回复问题请先登录注册