'od.update(E, **F) -> None.  Update od from dict/iterable E and F.
If E is a dict instance, does:           for k in E: od[k] = E[k]
If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
Or if E is an iterable of items, does:   for k, v in E: od[k] = v
In either case, this is followed by:     for k, v in F.items(): od[k] = v'

def update(*args, **kwds):

    if (len(args) > 2):
        raise TypeError((u'update()    takes    at    most    2    positional    arguments    (%d    given)' % (len(args),)))
    elif (not args):
        raise TypeError(u'update()    takes    at    least    1    argument    (0    given)')
    self = args[0]
    other = ()
    if (len(args) == 2):
        other = args[1]
    if isinstance(other, dict):
        for key in other:
            self[key] = other[key]
    elif hasattr(other, u'keys'):
        for key in other.keys():
            self[key] = other[key]
    else:
        for (key, value) in other:
            self[key] = value
    for (key, value) in kwds.items():
        self[key] = value
