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

Python嵌套字典数值相乘实现失败,求正确实现方案

问题与解决方案

我多次尝试实现嵌套字典中的数值相乘,参考相关资料后仍未成功。以下是我最后尝试的代码:

d1 = {"1 dozen" : [12, "pieces"], "1 gross" : [12, "dozen"]}
a = 1
for i in d1:
   a = a*d1[i]
print(a)

期望得到的结果为:144 pieces


问题分析

  1. 代码报错的核心原因是直接用整数与列表执行乘法:d1[i]返回的是[数值, 单位]格式的列表,无法和整数a进行乘法运算。
  2. 逻辑上未处理单位的层级关系:gross的单位是dozen,而dozen对应的单位是pieces,需要将所有层级的数值相乘,最终取最底层的单位。

解决方案

方案一:遍历字典计算总数值并匹配最终单位

d1 = {"1 dozen": [12, "pieces"], "1 gross": [12, "dozen"]}

total = 1
final_unit = None

# 计算所有数值的乘积
for key in d1:
    value, unit = d1[key]
    total *= value
    # 确定最终单位(找到最底层的非嵌套单位)
    if unit not in [k.split()[-1] for k in d1.keys()]:
        final_unit = unit
    else:
        # 若当前单位是字典中的嵌套单位,查找其对应的底层单位
        for k in d1:
            if k.split()[-1] == unit:
                final_unit = d1[k][1]

print(f"{total} {final_unit}")

方案二:按单位层级循环计算(更简洁)

调整字典结构以单位为键,便于层级查找:

unit_map = {"dozen": [12, "pieces"], "gross": [12, "dozen"]}

current_unit = "gross"
total = 1

# 循环遍历单位层级,直到找到最底层单位
while current_unit in unit_map:
    multiplier, next_unit = unit_map[current_unit]
    total *= multiplier
    current_unit = next_unit

print(f"{total} {current_unit}")

两种方案运行后都会输出:144 pieces


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:55:20