You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两个字典列表中对应字典的键值相乘?

解决两个字典列表对应位置键值相乘的问题

需求说明

给定两个字典列表:

  • list1内所有字典的键完全相同
  • list2内所有字典的键也完全相同
  • 两个列表长度始终一致,需按索引对应位置的字典值相乘,生成包含统一键product的字典列表,最终用于Flask的Jinja模板循环填充表格。

输入示例

list1 = [{'l1_key': 1}, {'l1_key': 2}]
list2 = [{'l2_key': 28.64}, {'l2_key': 303.35}]

期望输出

multiplied = [{'product': 28.64}, {'product': 606.7}]

现有问题分析

你写的嵌套循环逻辑错误,且操作字典的方式导致了KeyError:

  1. 嵌套循环会让list1的每个元素和list2的所有元素相乘,不符合"对应位置"的要求
  2. 每次循环后清空values字典,下一次循环访问values['value1']时会找不到键

错误代码

list1 = [{'l1_key': 1}, {'l1_key': 2}]
list2 = [{'l2_key': 28.64}, {'l2_key': 303.35}]

values = {}
multiplied = []

# 遍历list1[]
for i in range(len(list1)):
    # 更新values{}
    values.update({"value1": list1[i]['l1_key']})
    print('values: ', values)
    
    # 遍历list2[]
    for x in range(len(list2)):
        # 更新values{}
        values.update({"value2": list2[x]['l2_key']})
        print('product: ', multiplied)
        
        # 赋值给变量
        num1 = values['value1']
        num2 = values['value2']
        
        # 相乘后添加到multiplied[]
        multiplied.append({"product": num1 * num2})
        print('multiplied: ', multiplied)
        
        # 清空values{}用于下一次循环
        values.clear()

终端错误输出

TERMINAL OUTPUT
----------------
values:  {'value1': 1}
values:  {'value1': 1, 'value2': 28.64}
multiplied:  []
multiplied:  [{'product': 28.64}]
values:  {'value2': 303.35}
multiplied:  [{'product': 28.64}]
...
in line xxx
    num1 = values['value1']
KeyError: 'value1'

解决方案

方案1:修复基础循环结构

直接按索引遍历,不需要额外字典中转,逻辑更清晰:

list1 = [{'l1_key': 1}, {'l1_key': 2}]
list2 = [{'l2_key': 28.64}, {'l2_key': 303.35}]
multiplied = []

for i in range(len(list1)):
    num1 = list1[i]['l1_key']
    num2 = list2[i]['l2_key']
    multiplied.append({"product": num1 * num2})

print(multiplied)  # 输出: [{'product': 28.64}, {'product': 606.7}]

方案2:Pythonic高效写法(推荐)

用zip()自动配对对应元素,配合列表推导式,代码更简洁且可扩展性更强:

list1 = [{'l1_key': 1}, {'l1_key': 2}]
list2 = [{'l2_key': 28.64}, {'l2_key': 303.35}]

# 动态获取字典的键(避免硬编码,适配后续键名变化)
key1 = next(iter(list1[0].keys()))
key2 = next(iter(list2[0].keys()))

# 列表推导式生成结果
multiplied = [{"product": item1[key1] * item2[key2]} for item1, item2 in zip(list1, list2)]

print(multiplied)  # 输出: [{'product': 28.64}, {'product': 606.7}]

优势:

  • zip()自动配对对应位置元素,避免手动索引操作
  • 动态获取键名,若SQL返回的字段名改变,代码无需修改
  • 列表推导式比普通循环执行效率更高

Flask Jinja模板适配

生成的multiplied列表可直接传入模板,循环填充表格:

<table>
    <thead>
        <tr><th>乘积结果</th></tr>
    </thead>
    <tbody>
        {% for item in multiplied %}
        <tr><td>{{ item.product }}</td></tr>
        {% endfor %}
    </tbody>
</table>

内容的提问来源于stack exchange,提问作者ImmuneMoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:01:52