例如:
l = [('a',1),('b',2),('a',2)]
collapsed_l = dict(a=[1,2],b=[2])
如何最好地从l
转到collapsed_l
?
从某种意义上说,我想要某种方式来概括我正在崩溃的“领域”以及哪个领域。我认为这类似于数据透视表在数据库和电子表格中的作用,但我可能错了。
答案 0 :(得分:5)
>>> from collections import defaultdict
>>> l = [('a',1),('b',2),('a',2)]
>>> collapsed_l = defaultdict(list)
>>> for letter,num in l:
collapsed_l[letter].append(num)
>>> collapsed_l
defaultdict(<type 'list'>, {'a': [1, 2], 'b': [2]})
答案 1 :(得分:5)
>>> from itertools import groupby
>>> from operator import itemgetter
>>> l = [('a',1),('b',2),('a',2)]
>>> dict((k,[n for l,n in v]) for k,v in groupby(sorted(l),itemgetter(0)))
{'a': [1, 2], 'b': [2]}
不确定折叠值的顺序是否重要,如果是,您可以将sorted(l)
修改为sorted(l,key=itemgetter(0))
答案 2 :(得分:2)
最干净的是循环遍历元组列表并将元素添加到字典中。如果密钥不存在,Setdefault将确保添加一个空列表。如果密钥存在,则该元素将附加到列表中。
>>> d=dict()
>>> for k,e in l:
d.setdefault(k,[]).append(e)
>>> d
{'a': [1, 2], 'b': [2]}
您也可以将collections.defaultdict
用于此目的,在这种情况下您不需要setdefault
方法。