Newbie Variable Substitution Question

Skip Montanaro skip at pobox.com
Wed Aug 20 13:53:35 EDT 2003


    ckrieg> for c in range(1, 3):
    ckrieg>     print "%(c)s %(1)s" % (locals(), dict01)
    
    ckrieg> Results in an error: TypeError: format requires a mapping

    ckrieg> Why doesn't the second loop work?  It seems to be a cleaner way
    ckrieg> of doing this.  Am I missing something?

The right-hand argument to the % operator is a tuple of dictionaries, not a
dictionary.

Try something like this instead:

    class MultiDict(dict):
        def __init__(self, *args):
            self._dicts = args

        def __getitem__(self, key):
            for d in self._dicts:
                try:
                    return d[key]
                except KeyError:
                    pass
            raise KeyError, key

        def has_key(self, key):
            for d in self._dicts:
                if key in d:
                    return True
            return False

    dict01 = { '1': 'a', '2': 'b' }
    for c in range(1, 3):
        print "%(c)s %(1)s" % MultiDict(locals(), dict01)





More information about the Python-list mailing list