我有python列表列表:
list = [['a', 0], ['a', 1], ['b', 1], ['c', 1], ['c', 3], ['c', 5], ['d', 2]]
我想创建一个包含以相同字母开头的子列表的python字典:
dict{'a':[0,1], 'b':[1], 'c':[1,3,5], 'd':[2]}
您能帮我吗?
答案 0 :(得分:3)
使用collection.defaultdict
例如:
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
例如:
result = {}
for m,n in lst:
result.setdefault(m, []).append(n)
print(result)
#{'a': [0, 1], 'c': [1, 3, 5], 'b': [1], 'd': [2]}
答案 1 :(得分:1)
使用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]}