首页 > 解决方案 > 像 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 循环时必须手动合并项目?

标签: python

解决方案


您的代码中的问题是您为每个项目创建一个字典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)))

推荐阅读