Как я могу использовать Python itertools.groupby ()? - PullRequest
430 голосов
/ 03 августа 2008

Мне не удалось найти понятного объяснения того, как на самом деле использовать функцию Python itertools.groupby(). То, что я пытаюсь сделать, это:

  • Возьмите список - в этом случае дочерние элементы объективированного lxml элемента
  • Разделите его на группы по некоторым критериям
  • Затем итерируйте каждую из этих групп отдельно.

Я просмотрел документацию и примеры , но у меня возникли проблемы при попытке применить их за пределами простого списка чисел.

Итак, как мне использовать itertools.groupby()? Есть ли другая техника, которую я должен использовать? Также будет приветствоваться указатель на хорошее «предварительное» чтение.

Ответы [ 12 ]

1 голос
/ 18 июня 2017

Может пригодиться один полезный пример:

from itertools import groupby

#user input

myinput = input()

#creating empty list to store output

myoutput = []

for k,g in groupby(myinput):

    myoutput.append((len(list(g)),int(k)))

print(*myoutput)

Пример ввода: 14445221

Пример вывода: (1,1) (3,4) (1,5) (2,2) (1,1)

0 голосов
/ 10 октября 2018

Вы можете написать собственную групповую функцию:

           def groupby(data):
                kv = {}
                for k,v in data:
                    if k not in kv:
                         kv[k]=[v]
                    else:
                        kv[k].append(v)
           return kv

     Run on ipython:
       In [10]: data = [('a', 1), ('b',2),('a',2)]

        In [11]: groupby(data)
        Out[11]: {'a': [1, 2], 'b': [2]}
...