python - 如何根据项目的第一个字符对可迭代对象中的项目进行分组?

标签 python

从一个已排序的可迭代对象开始,我需要按项目的第一个字符对项目进行分组(比如从 a 到 z 的每个字母一组,数字和符号一组)。

举个更具体的例子,假设我有这个列表:

L = ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc', '10', '%a' , 'b', ...]

我需要这样的东西:

GL = [['aa', 'ab', 'ac'], ['ba', 'bb', 'bc'], ['ca', 'cb', 'cc'], [' 10', '%a', 'b']]

这样做有哪些选择,哪个最有效?

最佳答案

import itertools as it

L = ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc', '10', '%a', ' b']

sorter = lambda x: x[0].lower() if x and x[0].isalpha() else '}'
GL = [list(v) for k, v in it.groupby(sorted(L, key=sorter), key=sorter)]

返回:

[['aa', 'ab', 'ac'],
 ['ba', 'bb', 'bc'],
 ['ca', 'cb', 'cc'],
 ['10', '%a', ' b']]

您可以使用其他东西代替 '}' 将所有非字母字符放在排序中的正确位置。

关于python - 如何根据项目的第一个字符对可迭代对象中的项目进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280969/

相关文章:

python - 防止 JSON 序列化在 Python 中抛出异常

python - 使用 (x,y) 坐标到达特定的 "village"(Python 3)

Python 选择和计数元素

python - supervisord 环境变量设置应用程序

python - 在 Python 中收集和报告多个异常的惯用方式

python - NOT NULL 约束失败

python子进程通信() block

python - 为什么我不能在 pysimplesoap 中设置 SOAP header ?

python - Flask request.form 包含数据,但 request.data 为空且 request.get_json() 返回错误

python - 当 multiprocessing 使用 fork 作为起始方法时,为什么传递给 Pool.map 的函数会被 pickle ?