DEV Community

Pythonic way to aggregate or group elements in a list using dict.get and dict.setdefault

Micheal Ojemoron on February 22, 2020

Using dict.get How often have you aggregated an item by its group like this: ar= [1,1,3,1,2,1,3,3,3,3] pairs = {} for i in ar: if...
Collapse
 
patarapolw profile image
Pacharapol Withayasakpunt

This is just too magical, and hard to understand.

items_by_type = {}
for item in items:
    items_by_type.setdefault(item.type, list()).append(item)

A less magical version is defaultdict (from collections)

items_by_type = defaultdict(list)
for item in items:
    items_by_type[item.type].append(item)
Collapse
 
waylonwalker profile image
Waylon Walker • Edited

Diddo the swap from

for i in range(len(items)):
   ...

to

for item in items:
   ...
Collapse
 
mojemoron profile image
Micheal Ojemoron

you are absolutely right, I have updated the code. Thanks

Collapse
 
mojemoron profile image
Micheal Ojemoron • Edited

You are right😁, fortunately there are several ways to do things in Python. I am more concerned about using dictionary methods. Thank you

Collapse
 
waylonwalker profile image
Waylon Walker

Good walk of the different dictionary methods.

Collapse
 
mojemoron profile image
Micheal Ojemoron

Thanks

Collapse
 
waylonwalker profile image
Waylon Walker

I love the Counter object. I've had a rest API getting bogged down with pandas trying to count something and it took a few seconds for each response. Counter was just a few ms.

Collapse
 
mojemoron profile image
Micheal Ojemoron

Great!

Collapse
 
bjoxiah profile image
Blessed J. Eikhiena

Great!

Collapse
 
mojemoron profile image
Micheal Ojemoron

Thanks