python - 由 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': []},
怎么解决?
解决方案
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})
推荐阅读
- sql-server - 如何从 SQL Server 导入数据以通过 adodb 连接访问
- java - Apache Beam TestStream finalPane 未按预期触发
- regex - 排除 lftp 镜像命令中所有以点为中心的内容
- jpeg - 使用英特尔 IPP 解压缩无损 JPEG
- python - 不断收到此错误“AF_INET 地址必须是元组,而不是套接字”。不知道如何解决它是什么意思
- jenkins - jenkins 中是否有一个插件来限制字符串参数的字符输入?
- r - 关于 R for 循环和 if 语句的一个实际问题
- python - 如何修复`警告:错误的管道:没有元素“疯狂”`
- architecture - 寻找下载大文件的架构
- c++ - 如何在虚拟机上使用 Visual Studio 设置内核调试器