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
相关产品推荐
相关产品推荐

