我有列表列表:
list = [['a', 0], ['a', 1], ['b', 1], ['c', 1], ['c', 3], ['c', 5], ['d', 2]]
我想创建一个以同一字母开头的冠军词典:
dict{'a':[0,1], 'b':[1], 'c':[1,3,5], 'd':[2]}
您能帮我吗?
使用 collection.defaultdict
ex:
from collections import defaultdict
lst = [['a', 0], ['a', 1], ['b', 1], ['c', 1], ['c', 3], ['c', 5], ['d', 2]]
result = defaultdict(list)
for m,n in lst:
result[m].append(n)
print(result)
#defaultdict(<type 'list'>, {'a': [0, 1], 'c': [1, 3, 5], 'b': [1], 'd': [2]})
或使用dict.setdefault
ex:
result = {}
for m,n in lst:
result.setdefault(m, []).append(n)
print(result)
#{'a': [0, 1], 'c': [1, 3, 5], 'b': [1], 'd': [2]}
使用 defaultdict
:
from collections import defaultdict
l = [['a', 0], ['a', 1], ['b', 1], ['c', 1], ['c', 3], ['c', 5], ['d', 2]]
d = defaultdict(list)
for i in l:
d[i[0]].append(i[1])
print(d)
# defaultdict(list, {'a': [0, 1], 'b': [1], 'c': [1, 3, 5], 'd': [2]})
,或者,如果是第一个元素对订书片进行排序,那么您也可以使用 itertools.groupby
:
from itertools import groupby
from operator import itemgetter
{k:[i[1] for i in v] for k,v in groupby(l, key=itemgetter(0))}
# {'a': [0, 1], 'b': [1], 'c': [1, 3, 5], 'd': [2]}