如何使用 python itertools.groupby() 按字符串的第一个字符对字符串列表进行分组?
Posted
技术标签:
【中文标题】如何使用 python itertools.groupby() 按字符串的第一个字符对字符串列表进行分组?【英文标题】:How can I use python itertools.groupby() to group a list of strings by their first character? 【发布时间】:2010-03-18 17:25:27 【问题描述】:我有一个类似于此列表的字符串列表:
tags = ('apples', 'apricots', 'oranges', 'pears', 'peaches')
我应该如何使用 itertools.groupby() 按每个字符串中的第一个字符对该列表进行分组?我应该如何提供 itertools.groupby() 所需的 'key' 参数?
【问题讨论】:
【参考方案1】:之后您可能想创建dict
:
from itertools import groupby
d = k: list(v) for k, v in groupby(sorted(tags), key=lambda x: x[0])
【讨论】:
...但别忘了先排序!【参考方案2】:groupby(sorted(tags), key=operator.itemgetter(0))
【讨论】:
它适用于 unicode。如果您询问它是否适用于 UTF-8 字符串,那么您应该询问何时应将其解码为 unicode。答案当然是只要它进来。 谢谢,它按预期工作。我确实有一个多语言标签列表,我将与各种翻译人员一起测试排序。 其实应该是:groupby(sorted(tags), key=operator.itemgetter(0))
【参考方案3】:
>>> for i, j in itertools.groupby(tags, key=lambda x: x[0]):
print(i, list(j))
a ['apples', 'apricots']
o ['oranges']
p ['pears', 'peaches']
【讨论】:
【参考方案4】:换一种方式,
>>> from collections import defaultdict
>>> t=defaultdict(list)
>>> for items in tags:
... t[items[0]].append(items)
...
>>> t
defaultdict(<type 'list'>, 'a': ['apples', 'apricots'], 'p': ['pears', 'peaches'], 'o': ['oranges'])
【讨论】:
以上是关于如何使用 python itertools.groupby() 按字符串的第一个字符对字符串列表进行分组?的主要内容,如果未能解决你的问题,请参考以下文章