Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Transforming a list

Tags:

python

list

I have a list like that :

[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]

How can i group the elements in the list, for example like above?

['0': ['10','11','12']],['1': ['10','11']]
like image 537
tchike Avatar asked Jan 27 '26 03:01

tchike


2 Answers

iterate - put into dictionary.

d = {}
l = [['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
for p in l:
    if p[0] in d:
        d[p[0]].append(p[1])
    else:
        d[p[0]] = [p[1]]

>>> d
{'1': ['10', '11'], '0': ['10', '11', '12']}

using defaultdict:

from collections import defaultdict

d = defaultdict(list)
l = [['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
for p in l:
    d[p[0]].append(p[1])

one-liner: using dict comprehension (a little wasteful, but no imports and requires 2.7+)

>>> dd = {key: [i[1] for i in l if i[0] == key] for (key, value) in l}
>>> dd
{'1': ['10', '11'], '0': ['10', '11', '12']}
like image 165
Inbar Rose Avatar answered Jan 28 '26 17:01

Inbar Rose


You could use collections.defaultdict:

import collections

l = [['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]

d = collections.defaultdict(list)
for k, v in l:
    d[k].append(v)
print(d)
like image 32
NPE Avatar answered Jan 28 '26 15:01

NPE