Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

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.

Files for group-by-attr, version 1.0.1
Filename, size File type Python version Upload date Hashes
Filename, size group_by_attr-1.0.1-py2.py3-none-any.whl (2.9 kB) File type Wheel Python version 2.7 Upload date Hashes View hashes
Filename, size group-by-attr-1.0.1.tar.gz (2.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page