将列表理解表达为for循环

2024-06-24 13:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正试着把注意力集中在列表理解上,试着通过举例和在理解之外形成循环来练习,反之亦然。可能是一个很容易犯的错误,或者是森林换树的情况。以示例项目中的以下表达式为例:

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循环时必须手动合并项目吗


Tags: 项目in列表fordata错误counter森林
2条回答

在for循环的每次迭代中,您都要创建一个新字典并将其附加到列表中。如果您想将整个字典存储在列表中,那么您应该尝试类似的方法,它会按预期输出:

rows = []
data = ['a', 'b']
res = ['1', '2']
myDict = {}
for counter, _ in enumerate(data):
   myDict[data[counter]]= res[counter]
rows.append(myDict)
print(rows)

输出:

[{'b': '2', 'a': '1'}] 

代码中的问题是为data中的每个项创建一个字典,并将其附加到每个迭代中的行中

为了实现所需的行为,您应该在每次迭代中更新相同的dict,并且在完成字典的工作之后,才应该将它附加到行中

试试这个:

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

相关问题 更多 >