简体   繁体   中英

Python: mimic the effect of groupby with list/dict comprehension

I need to transform a list of dict:

original = [
    {'type': 'a', 'length': 34, 'width': 74},
    {'type': 'a', 'length': 15, 'width': 22},
    {'type': 'b', 'length': 53, 'width': 54},
    {'type': 'b', 'length': 11, 'width': 45},
] 

into a dict with the value of type key as the key:

expected = {
    'a': [
        {'type': 'a', 'length': 34, 'width': 74},
        {'type': 'a', 'length': 15, 'width': 22},
    ],
    'b': [
        {'type': 'b', 'length': 53, 'width': 54},
        {'type': 'b', 'length': 11, 'width': 45},
    ],
}  

This can be achieved with itertools.groupby or by iterating through the list manually, but is there any way to do it with just list/dict comprehension?

You could do something like this:

{t: [i for i in original if i['type'] == t] for t in {i['type'] for i in original}}

But it's both difficult to read and has a worst-case runtime complexity of O(n²) , where n is the number of items in the list. Using itertools.groupby on a sorted list is both faster and easier to read.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM