1 回答
TA贡献1862条经验 获得超7个赞
你真的不需要使用groupby来做到这一点。
考虑您的链接示例:
list1=['hello','hope','hate','hack','bit','basket','code','come','chess']
您可以创建使用本机 Python 字典描述的组:
groups={}
for word in list1:
groups.setdefault(word[0],[]).append(word)
>>> groups
{'h': ['hello', 'hope', 'hate', 'hack'], 'b': ['bit', 'basket'], 'c': ['code', 'come', 'chess']}
或者,defaultdict如果您愿意:
from collections import defaultdict
groups=defaultdict(list)
for word in list1:
groups[word[0]].append(word)
>>> groups
defaultdict(<class 'list'>, {'h': ['hello', 'hope', 'hate', 'hack'], 'b': ['bit', 'basket'], 'c': ['code', 'come', 'chess']})
这两种方法都适用于完全未排序的数据,并根据第一个字母收集单词。然后,如果需要,您可以自由使用该 dict 的值来制作列表列表:
>>> sorted(groups.values(), key=lambda s: s[0])
[['bit', 'basket'], ['code', 'come', 'chess'], ['hello', 'hope', 'hate', 'hack']]
现在,如果您出于某种原因仍想使用groupby,您可能会执行以下操作:
groups={}
for k,v in groupby(list1, key=lambda s: s[0]):
groups.setdefault(k,[]).extend(v)
添加回答
举报