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