首页 > 解决方案 > 由 Python 中的 Itertools 生成的奇怪的空列表

问题描述

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

怎么解决?

标签: pythonanacondaitertools

解决方案


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})

推荐阅读