[Python-ideas] Proposal : allowing grouping by relation

Stephen J. Turnbull stephen at xemacs.org
Sat Aug 23 22:42:53 CEST 2014


Yotam Vaknin writes:
 > Hi,
 > 
 > I am using groupby (from itertools) to group objects by a key. It
 > would be very useful for me to be able to group objects by the
 > relation of two consecutive  objects or by an object relation to
 > the first object in the current group.

I don't think you need to extend groupby.  You can just cache the
object to compare to.  How about a decorator like

def relate_to_first(is_related):
    def wrapped(this, _first=[]):
        if _first:
            if is_related(this, _first[0]):
                pass
            else:
                _first[0] = this
                _first[1] += 1
        else:
            _first[0] = this
            _first[1] = 0
        return _first[1]
    return wrapped

@relate_to_first
def some_relation(this, that):
    pass

and similarly for a decorator relate_to_last?

There are probably more elegant ways to do this, such as a class whose
instances are callable.  Such a class could also provide a reset
method so you could reuse the relation

Warning: that code is untested.


More information about the Python-ideas mailing list