Странные пустые списки, созданные Itertools в Python - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть список диктов, и я хочу использовать itertools.groupby, чтобы изменить его, код прост:

from operator import itemgetter
sorted_animals = sorted(questions, key=itemgetter('intent'))
for key, group in itertools.groupby(sorted_animals, key=lambda x:x['intent']):
    print(key),
    print(list(group))
    questions_grouped.append({key: list(group)})
print("questions_grouped:", questions_grouped)
pprint(questions_grouped)

Этот код работает, у меня есть ожидаемый результат, новый дикт, сгруппированный по ключу, он печатается следующим образом:

greet
[{'intent': 'greet', 'text': 'Hi. Hi.'}, {'intent': 'greet', 'text': 'Hello'}]

Но я действительно расстроен тем, что если я смотрю на список, созданный с этими элементами, я получаю весь список пустым!: Это супер странно, предполагая, что простая печать работает, и у всех списков должен быть контент. Я использую Python 3.6.5, Anaconda

questions_grouped:
[{'greet': []},
 {'ask_family1': []},
 {'ask_family10': []},
 {'ask_family11': []},
 {'ask_family12': []},

Как решить?

1 Ответ

1 голос
/ 09 ноября 2019

print(list(group)) для отладки потребляет group, что является итеративным. Просто удалите его, так как он имеет побочный эффект.

print(list(group))  # prints and empties group. Remove that line
questions_grouped.append({key: list(group)})  # now list(group) is []

Если вам нужна отладка и печать, сначала сохраните результат в переменной.

group = list(group)
print(group)
questions_grouped.append({key: group})
...