def update(self, *sets, **keywords):
        session = self.session
        key = self.key
        encode = self.value_type.encode
        def block(trial, transaction):
            session.mark_manipulative([key])
            zincrby = session.client.zincrby
            online_sets = []
            for set_ in sets:
                if isinstance(set_, SortedSet):
                    online_sets.append(set_)
                elif isinstance(set_, collections.Mapping):
                    for el, score in getattr(set_, 'iteritems', set_.items)():
                        el = encode(el)
                        if not isinstance(score, numbers.Real):
                            raise TypeError('score must be a float, not ' +
                                            repr(score))
                        zincrby(key, value=el, amount=score)
                elif isinstance(set_, collections.Iterable):
                    for el in set_:
                        el = encode(el)
                        zincrby(key, value=el, amount=1)
                else:
                    raise TypeError('expected iterable, not ' + repr(set_))
            for el, score in getattr(keywords, 'iteritems', keywords.items)():
                if not isinstance(score, numbers.Real):
                    raise TypeError('score must be a float, not ' +
                                    repr(score))
                el = encode(el)
                zincrby(key, value=el, amount=score)
            if online_sets:
                keys = [set_.key for set_ in online_sets]
                keys.insert(0, key)
                session.client.zunionstore(key, keys)
        session.transaction(block, [key], ignore_double=True)
Merge with passed sets and keywords.  It's behavior is
dataset/ETHPy150Open dahlia/sider/sider/sortedset.py/SortedSet.update