python - 像 for 循环一样表达列表理解
问题描述
我目前正试图将我的头脑围绕在列表推导上,并尝试通过举例来进行一些练习,并在推导中形成循环,反之亦然。可能是一个非常容易犯的错误,或者以林还林的情况。从示例项目中获取以下表达式:
rows = []
data = ['a', 'b']
res = ['1', '2']
rows.append({data[counter]: res[counter] for counter, _ in enumerate(data)})
打印(行):
[{'a': '1', 'b': '2'}]
我如何将其作为 for 循环执行?以下将每个循环包装成一个大括号而不是两者。
for counter, _ in enumerate(data):
rows.append({data[counter]: res[counter]})
打印(行):
[{'a': '1'}, {'b': '2'}]
我错过了什么吗?还是在使用 for 循环时必须手动合并项目?
解决方案
您的代码中的问题是您为每个项目创建一个字典data
并将其附加到每次迭代中的行。
为了实现所需的行为,您应该在每次迭代中更新相同的字典,并且在完成对字典的处理之后,您才应该将其附加到行中。
尝试这个:
rows = []
data = ['a', 'b']
res = ['1', '2']
payload = {}
for counter, val in enumerate(data):
payload[val] = res[counter]
rows.append(payload)
另一种紧凑的编写方式可能是:
rows.append(dict(zip(data,res)))
推荐阅读
- amazon-web-services - 如何将 Docker 映像从 docker hub 部署到 AWS docker swarm 集群
- svg - Snap.svg 嵌入 html 表单
- python - 用pytest编写测试用例进行数据验证,测试用例的性质随组执行而变化
- angular - 角度传递方法到指令
- sql - 将 SELECT 数据从一个表复制到另一个表
- scala - 如何修复sparkstreaming中的任务不可序列化异常
- angular - 向服务器发送一些数据后如何重新加载组件?
- vbscript - Outlook VBscript 方法 .Send 停止脚本
- c# - EF Core 包含列表列表
- javafx - 如何在javafx中获取按钮的背景颜色?