Python itertools.groupby () с использованием кортежей с несколькими ключами - PullRequest
0 голосов
/ 18 декабря 2018

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

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

Текущий вывод, который я получаю:

grape 3
apple 4
banana 1

Вывод, который я хотел бы получить:

grape lemon 3
apple banana 4
banana pie 1

Я действительно просто хочу получить эту секундуслово из списков.Как я могу это сделать?

import itertools
import operator

L = [('grape', 'orange', 100), ('grape', 'lemon', 3), ('apple', 'kiwi', 15), 
    ('apple', 'pie', 10), ('apple', 'banana',4), ('banana', 'pie', 1), 
    ('banana', 'kiwi', 2)]

it = itertools.groupby(L, operator.itemgetter(0))
for key, subiter in it:
    print(key, min(item[2] for item in subiter))

1 Ответ

0 голосов
/ 19 декабря 2018

Похоже, что ваша проблема связана не с itertools.groupby, а с min.

Чтобы восстановить кортеж с наименьшим третьим значением, используйте аргумент key функции min.

import itertools
import operator

L = [('grape', 'orange', 100), ('grape', 'lemon', 3), ('apple', 'kiwi', 15),
    ('apple', 'pie', 10), ('apple', 'banana',4), ('banana', 'pie', 1),
    ('banana', 'kiwi', 2)]

it = itertools.groupby(L, operator.itemgetter(0))

for key, group in it:
    print(*min(group, key=operator.itemgetter(2))) # Use the key argument of min

Выход

grape lemon 3
apple banana 4
banana pie 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...