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

嵌套字典遍历问题:高效搜索商品并计算均价的代码优化

问题修复与优化方案

问题分析

  1. 低效搜索与重复计数:原代码遍历每个字典的所有键值对,若单个字典内多个值匹配搜索词,会重复累加价格和计数,导致结果错误。
  2. 错误的提示输出:修改后的代码在每个不匹配的键值对都打印“not in list”,导致大量重复输出,而非在完全无匹配时仅提示一次。
  3. 实时打印不符合需求:每次匹配就打印结果,不符合“不在迭代中打印”的要求。

优化后的代码

# 假设原始数据列表为l
l = [
    {'id': 2, 'name': 'apple', 'price': '150', 'year': '2022', 'currency': 'eur'},
    {'id': 3, 'name': 'apple', 'price': '1220', 'year': '160', 'currency': 'eur'},
    {'id': 4, 'name': 'apple', 'price': '150', 'year': '2080', 'currency': 'eur'}
]

total = 0
count = 0
matched_products = []  # 收集匹配的产品信息

product_search = input('product: ')

for d in l:
    # 检查当前字典是否包含搜索词(任意字段匹配)
    if product_search in d.values():
        price = int(d['price'])
        total += price
        count += 1
        matched_products.append((d['name'], price))

# 统一打印匹配结果
if matched_products:
    for name, price in matched_products:
        print(name, price)
    print(f'average price of a {matched_products[0][0]} is: {total / count:.2f}')
else:
    print('not in list')

代码说明

  • 高效匹配:直接检查字典的所有值是否包含搜索词,避免嵌套遍历每个键值对,同时确保单个字典仅被计数一次。
  • 结果收集后统一输出:用列表matched_products存储所有匹配项,遍历结束后再统一打印,符合“不在迭代中打印”的需求。
  • 正确的提示逻辑:仅在完全没有匹配产品时,才打印一次“not in list”,避免重复输出。
  • 格式化平均价格:用:.2f保留两位小数,让结果更直观。

可选优化:仅按产品名称搜索

如果你的需求是仅匹配产品名称(而非任意字段),可以进一步提升效率,直接判断d['name']是否等于搜索词,无需遍历所有值:

# 仅按名称搜索的优化版本
total = 0
count = 0
matched_products = []

product_search = input('product: ')

for d in l:
    if d['name'] == product_search:
        price = int(d['price'])
        total += price
        count += 1
        matched_products.append((d['name'], price))

if matched_products:
    for name, price in matched_products:
        print(name, price)
    print(f'average price of a {product_search} is: {total / count:.2f}')
else:
    print('not in list')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:40:25