基于sublist中第一个元素的列表群集列表



我有列表列表:

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]}

最新更新