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

时间:2011-09-02 08:31:13

标签: 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']]

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

1 个答案:

答案 0 :(得分:9)

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']]

您可以使用其他内容而不是'}'将所有非字母字符放在排序中的正确位置。