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