如何使用 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 字符串,那么您应该询问何时应将其解码为 un​​icode。答案当然是只要它进来。 谢谢,它按预期工作。我确实有一个多语言标签列表,我将与各种翻译人员一起测试排序。 其实应该是: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() 按字符串的第一个字符对字符串列表进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

FME如何使用Python?

如何使用python读写文件?

如何使用 Boost.Python 定义 Python 元类?

2.如何使用python连接hdfs

python如何输入矩阵

python2.6如何使用PIL