例 1

说你有字符串

s = 'AAAABBBCCDAABBB'

并且你想把它分开,所以所有’A’都在一个列表中,因此所有的’B’和’C’等等你可以做这样的事情

s = 'AAAABBBCCDAABBB'
s_dict = {}
for i in s:
    if i not in s_dict.keys():
        s_dict[i] = [i]
    else:
        s_dict[i].append(i)
s_dict

结果是

{'A': ['A', 'A', 'A', 'A', 'A', 'A'],
 'B': ['B', 'B', 'B', 'B', 'B', 'B'],
 'C': ['C', 'C'],
 'D': ['D']}

但对于大型数据集,你将在内存中构建这些项目。这就是 groupby() 的用武之地

通过执行以下操作,我们可以以更有效的方式获得相同的结果

# note that we get a {key : value} pair for iterating over the items just like in python dictionary
from itertools import groupby
s = 'AAAABBBCCDAABBB'
c = groupby(s)

dic = {} 
for k, v in c:
    dic[k] = list(v)
dic

结果是

{'A': ['A', 'A'], 'B': ['B', 'B', 'B'], 'C': ['C', 'C'], 'D': ['D']}

请注意,当我们使用 group by 时,结果中的’A’的数量小于原始字符串中’A’的实际数量。我们可以通过在将项目传递给 c 之前对项目进行排序来避免信息丢失,如下所示

c = groupby(sorted(s))

dic = {} 
for k, v in c:
    dic[k] = list(v)
dic

结果是

{'A': ['A', 'A', 'A', 'A', 'A', 'A'], 'B': ['B', 'B', 'B', 'B', 'B', 'B'], 'C': ['C', 'C'], 'D': ['D']}

现在我们拥有了所有’A’。