简体   繁体   English

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

[英]cluster list of lists based on the first element in the sublist

I have python list of lists: 我有清单的python清单:

list = [['a', 0], ['a', 1], ['b', 1], ['c', 1], ['c', 3], ['c', 5], ['d', 2]]

I want to create a python dictionary which has sublists that begin with the same letter: 我想创建一个包含以相同字母开头的子列表的python字典:

dict{'a':[0,1], 'b':[1], 'c':[1,3,5], 'd':[2]}

could you help me with that? 你能帮我吗?

Using collection.defaultdict 使用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]})

or using dict.setdefault 或使用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]}

Use a defaultdict : 使用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]})

Or if the sublists are sorted by the first element, as it appears to be, you can also use itertools.groupby : 或者,如果子列表按第一个元素排序,则也可以使用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]}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM