例 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’。