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

Python中匹配过滤两个字典提取对应子字典value值的实现方法

问题原因分析
  • 原有代码未对StrategyNumber做匹配校验,只要file2当前指标下存在符合日期非空的策略,就会遍历输出该指标下file1所有策略的value,是导致重复输出的核心原因
  • 你给出的预期输出中第二个值24应为笔误,对照你提供的file1结构,StrategyNumber=3对应的value为22,修正后符合数据逻辑的输出应为3000、22、234
修正方案

方案1:提前做策略映射(效率更高,推荐)

先把file1同指标下的策略按StrategyNumber做映射,避免嵌套循环匹配,代码如下:

for indicator in file2:
    # 构造当前指标下 StrategyNumber到value的映射字典
    strat_value_map = {item['StrategyNumber']: item['value'] for item in file1[indicator]}
    for strat_info in file2[indicator]:
        # 先判断两个日期字段是否均非空
        if len(strat_info["Openningdate"]) > 0 and len(strat_info["Closingdate"]) > 0:
            # 直接取出对应策略号的value输出
            print(strat_value_map[strat_info['StrategyNumber']])

方案2:在原有代码基础上增加匹配逻辑

如果不想修改原有循环结构,仅需补充StrategyNumber的匹配判断即可,代码如下:

for Strats in file2:
    for Strats_info in file2[Strats]:
        # 先判断日期是否符合条件,不符合直接跳过后续循环
        if len(Strats_info["Openningdate"]) > 0 and len(Strats_info["Closingdate"]) > 0:
            for momentum_filter in file1[Strats]:
                # 增加同策略号匹配逻辑
                if momentum_filter['StrategyNumber'] == Strats_info['StrategyNumber']:
                    print(momentum_filter['value'])
运行输出

两种方案运行后均会得到如下结果:

3000
22
234

如果你预期输出中的24对应其他业务逻辑,可自行调整value取值部分的代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:51:02