Python嵌套字典数值相乘实现失败,求正确实现方案
问题与解决方案
我多次尝试实现嵌套字典中的数值相乘,参考相关资料后仍未成功。以下是我最后尝试的代码:
d1 = {"1 dozen" : [12, "pieces"], "1 gross" : [12, "dozen"]} a = 1 for i in d1: a = a*d1[i] print(a)
期望得到的结果为:144 pieces
问题分析
- 代码报错的核心原因是直接用整数与列表执行乘法:
d1[i]返回的是[数值, 单位]格式的列表,无法和整数a进行乘法运算。 - 逻辑上未处理单位的层级关系:
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
相关产品推荐
相关产品推荐

