Fatiar objetos em sublistas que compartilham uma propriedade comum

Algumas vezes, você deseja dividir uma lista de objetos (ou dicionários) em sublistas de objetos que compartilham uma propriedade comum. Nesses casos, você pode usar este recorte simples:

def slice(objects, prop):
"""
slice objects in sub-lists sharing a common property

"""

if not objects:
return []

def get_prop(obj, prop):
if not isinstance(objects[0], dict):
return obj.__dict__[prop]
return obj[prop]

objects_set
= set([get_prop(o, prop) for o in objects])
return [[o for o in objects if get_prop(o, prop) == obj] for obj in objects_set]