Как я могу использовать python itertools.groupby () для группировки списка строк по их первому символу? - PullRequest
7 голосов
/ 18 марта 2010

У меня есть список строк, похожих на этот список:

tags = ('apples', 'apricots', 'oranges', 'pears', 'peaches')

Как мне сгруппировать этот список по первому символу в каждой строке, используя itertools.groupby ()? Как мне указать аргумент 'key', требуемый для itertools.groupby ()?

Ответы [ 4 ]

13 голосов
/ 18 марта 2010
groupby(sorted(tags), key=operator.itemgetter(0))
10 голосов
/ 18 марта 2010

Возможно, вы захотите создать dict впоследствии:

from itertools import groupby

d = {k: list(v) for k, v in groupby(tags, key=lambda x: x[0])}
5 голосов
/ 18 марта 2010
>>> for i, j in itertools.groupby(tags, key=lambda x: x[0]):
    print(i, list(j))


a ['apples', 'apricots']
o ['oranges']
p ['pears', 'peaches']
1 голос
/ 18 марта 2010

просто по-другому,

>>> 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']})
...