Skip to main content

Group items in a sequence by the value of a shared attribute.

Project description

Compatibility Implementations Format Downloads

Group items in a sequence by the value of a shared attribute.

group_by_attr(attr, items)

Installation:

$ pip install group-by-attr

Example

Let’s say you want to group some “Struct” instances together.

>>> from pprint import pprint
>>> from collections import namedtuple
>>> Struct = namedtuple('Struct', ('x', 'y', 'z'))
>>> a, b, c = (
...     Struct(x=1, y=1, z=1),
...     Struct(x=1, y=2, z=2),
...     Struct(x=1, y=1, z=3))

If we were to group these instances by the ‘x’ attribute, we should expect a single group containing all three items:

>>> pprint(group_by_attr(attr='x', items=(a, b, c)))
{1: (Struct(x=1, y=1, z=1),
     Struct(x=1, y=2, z=2),
     Struct(x=1, y=1, z=3))}

If, instead, we were to group by ‘y’, we should expect a different grouping:

>>> pprint(group_by_attr(attr='y', items=(a, b, c)))
{1: (Struct(x=1, y=1, z=1),
     Struct(x=1, y=1, z=3)),
 2: (Struct(x=1, y=2, z=2),)}

Finally, grouping by ‘z’ will result in three separate groups:

>>> pprint(group_by_attr(attr='z', items=(a, b, c)))
{1: (Struct(x=1, y=1, z=1),),
 2: (Struct(x=1, y=2, z=2),),
 3: (Struct(x=1, y=1, z=3),)}

This function can also use an alternate getattr, as long as it implements the same interface (taking an item and an attribute name as arguments). For example, you could group dictionaries:

>>> pprint(group_by_attr(
...     attr='x',
...     items=(
...         {'x': 1, 'y': 'a'},
...         {'x': 2, 'y': 'b'},
...         {'x': 1, 'y': 'c'}),
...     getattr_fn=dict.__getitem__))
{1: ({'x': 1, 'y': 'a'},
     {'x': 1, 'y': 'c'}),
 2: ({'x': 2, 'y': 'b'},)}

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

group-by-attr-1.0.1.tar.gz (2.1 kB view hashes)

Uploaded Source

Built Distribution

group_by_attr-1.0.1-py2.py3-none-any.whl (2.9 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page