我有一个这样的名单:转化列表
[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
哪能组在列表中的元素,例如像上面?
['0': ['10','11','12']],['1': ['10','11']]
我有一个这样的名单:转化列表
[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
哪能组在列表中的元素,例如像上面?
['0': ['10','11','12']],['1': ['10','11']]
迭代 - 放入字典。
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']}
使用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])
一行代码:使用dict comprehension(有点浪费,但没有进口,并要求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']}
这个单线程将在python 2.6以及2.7:'dict((key,[i [1] for i in l if i [0] == key])for键,值)in l)',尽管基于groupby()的解决方案在这里好得多。 –
你可以使用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)
您可以使用dict.setdefault()
:
In [16]: lis=[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
In [17]: dic={}
In [18]: for x,y in lis:
....: dic.setdefault(x,[]).append(y)
....:
In [19]: dic
Out[19]: {'0': ['10', '11', '12'], '1': ['10', '11']}
和名单也甚至itertools.groupby
将正常工作:
In [39]: from operator import itemgetter
In [40]: from itertools import groupby
In [34]: lis=[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
In [35]: {k:[x[1] for x in g] for k,g in groupby(lis,key=itemgetter(0))}
Out[35]: {'0': ['10', '11', '12'], '1': ['10', '11']}
您的意思是有[ '1', '11']作为最后一个项目列表? –
@FarukSahin panpa是的,我编辑它 – tchike
结果中键('0'和'1')的顺序很重要吗? – NPE