Python 转换列表
我有一个这样的清单:Python 转换列表,python,list,Python,List,我有一个这样的清单: [['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', '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']}
使用:
一行:使用(有点浪费,但没有进口,需要2.7+)
您可以使用:
您可以使用
dict.setdefault()
:
对于您的列表,它也可以很好地工作:
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是的,我编辑了重要结果中键的顺序(
0
和1
)?这一行将在python 2.6和2.7中工作:dict(key,[i[1]表示l中的i,如果i[0]==key])表示l中的(key,value)
,尽管groupby()
基于此的解决方案在这里更好。
>>> 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']}
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)
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']}
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']}