Itertools在Python中产生的奇怪的空列表

我有字典列表,我想使用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': []},

如何解决?

h402482070 回答:Itertools在Python中产生的奇怪的空列表

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})
本文链接:https://www.f2er.com/3134981.html

大家都在问