itertools.groupby () не группируется правильно

У меня есть следующие данные:

self.data = [(1, 1, 5.0), (1, 2, 3.0), (1, 3, 4.0), (2, 1, 4.0), (2, 2, 2.0)] 

Когда я запускаю этот код:

 for mid, group in itertools.groupby(self.data, key=operator.itemgetter(0)): 

для list(group) я получаю:

 [(1, 1, 5.0), (1, 2, 3.0), (1, 3, 4.0)] 

чего я хочу.

Но если я использую 1 вместо 0

 for mid, group in itertools.groupby(self.data, key=operator.itemgetter(1)): 

чтобы группировать по второму числу в кортежах, я получаю:

 [(1, 1, 5.0)] 

хотя есть и другие кортежи, которые имеют «1» в этой 1 (2) позиции.

itertools.groupby собирает смежные предметы с одним и тем же ключом. Если вы хотите, чтобы все элементы с одним и тем же ключом, вам нужно сначала отсортировать self.data .

 for mid, group in itertools.groupby( sorted(self.data,key=operator.itemgetter(1)), key=operator.itemgetter(1)): 

Вариант без сортировки (через словарь). Должно быть лучше по производительности.

 def full_group_by(l, key=lambda x: x): d = defaultdict(list) for item in l: d[key(item)].append(item) return d.items() 
  • Аргументы ввода и командной строки пользователя
  • Каков наилучший способ удаления дубликатов файлов изображений с вашего компьютера?
  • Использование кавычек в кавычках
  • Войдите в gmail, используя Selenium в Python
  • Почему моя функция NLTK замедляется при обработке DataFrame?
  • Локальные настройки Django
  • Как получить индексы N максимальных значений в массиве NumPy?
  • Как создать пользовательскую функцию активации с помощью Keras?
  • Как удалить элемент из списка по индексу в Python?
  • Постановка простого оператора if-then-else на одну строку
  • Переименование столбцов результатов из агрегации Pandas («FutureWarning: использование dict с переименованием устарело»)
  • Давайте будем гением компьютера.