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

Python遍历字典列表匹配指定键值获取对应值的正确方法

问题根因

你的代码bug出在遍历赋值逻辑上:
遍历整个持仓列表时,即使前面已经匹配到目标Symbol,只要后续遍历到的字典不匹配,就会把变量q重新赋值为0,函数最终返回的是遍历完最后一个字典后的q值,所以只有当目标Symbol刚好是列表最后一个元素时才能返回正确结果,其余匹配项都会被后续遍历覆盖为0。

以调用getposition("FNGU")为例,实际执行流程是:

  • 遍历第一个字典,Symbol匹配,q被赋值为124
  • 遍历第二个字典,Symbol为SPY不匹配,q被覆盖为0
  • 遍历第三个字典,Symbol为LABU不匹配,q保持0
  • 遍历结束返回q=0,和你看到的错误结果一致
正确实现方案

方案1:匹配到立即返回(代码最简洁,遍历效率高)

找到匹配项后直接终止遍历返回结果,整个列表遍历完都没匹配到就返回0:

p = [
    {'AveragePrice': '8.5334167347', 'AssetType': 'STOCK', 'Quantity': '124', 'Symbol': 'FNGU'}, 
    {'AveragePrice': '6.5334167347', 'AssetType': 'STOCK', 'Quantity': '100', 'Symbol': 'SPY'}, 
    {'AveragePrice': '7.5215053838', 'AssetType': 'STOCK', 'Quantity': '69', 'Symbol': 'LABU'}
]

def getposition(symbol):
    for stock in p:
        if stock["Symbol"] == symbol:
            return int(stock["Quantity"])
    return 0

# 测试输出
print("LABU", getposition("LABU"))  # 输出 LABU 69
print("FNGU", getposition("FNGU"))  # 输出 FNGU 124
print("SPY", getposition("SPY"))    # 输出 SPY 100
print("AAPL", getposition("AAPL"))  # 输出 AAPL 0

方案2:预构建查询字典(适合高频查询场景)

如果需要频繁查询不同股票的持仓,可以先把列表预处理成以Symbol为键、持仓量为值的字典,后续查询时间复杂度为O(1),性能更好:

# 一次性预处理持仓数据为查询字典
position_dict = {stock["Symbol"]: int(stock["Quantity"]) for stock in p}

def getposition(symbol):
    return position_dict.get(symbol, 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:06:07