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

Python如何以校验字典为依据过滤容量匹配的字典键值对?

解决字典中产品与图片容量不匹配的高效筛选方案

你已经精准定位了问题核心——只匹配产品名称却忽略容量校验,导致出现错误的映射关系。下面是一个高效且易维护的解决方案,既能避免冗余嵌套循环,又能确保容量匹配的准确性:

核心思路

我们先对校验字典的容量标识按长度倒序排序(避免短标识误匹配长标识,比如20L和200L),再对每个主字典的键值对快速定位对应的容量要求,最后验证值是否符合该容量即可。

完整代码实现

main_dict = { 
    "product_x_name_1L": "product_x_pic_1l", 
    "product_y_name_4L": "product_y_pic_4l", 
    "product_z_name_20L": "product_z_pic_20l", 
    "product_n_name_1L": "product_n_pic_4l", 
    "product_q_name_200L": "product_q_pic_20l", 
    "product_s_name_4L": "product_s_pic_200l" 
}

checker_dict = { "1L": "1l", "4L": "4l", "20L": "20l", "200L": "200l" }

# 按容量标识长度倒序排序,优先匹配长标识(避免20L误匹配200L的键)
sorted_check_keys = sorted(checker_dict.keys(), key=lambda x: len(x), reverse=True)

final_dict = {}
for key, value in main_dict.items():
    for check_key in sorted_check_keys:
        if check_key in key:
            # 获取该容量对应的正确小写后缀
            expected_suffix = checker_dict[check_key]
            if expected_suffix in value:
                final_dict[key] = value
            # 每个产品键仅对应一个容量,找到匹配项后跳出循环
            break

print(final_dict)

代码解释

  • 排序处理:将checker_dict的键按长度从长到短排序,确保200L会先于20L被匹配,避免product_q_name_200L被错误识别为20L的情况。
  • 单循环校验:对每个主字典的键,只需遍历一次排序后的容量标识,找到匹配的容量后立即验证对应的值是否符合要求,验证通过就加入最终字典,随后跳出内层循环,减少不必要的遍历。
  • 结果输出:运行代码后,final_dict会仅保留容量匹配正确的键值对:
    {
        "product_x_name_1L": "product_x_pic_1l",
        "product_y_name_4L": "product_y_pic_4l",
        "product_z_name_20L": "product_z_pic_20l"
    }
    

扩展优化(可选)

如果你的产品键和值的格式非常固定(比如统一为product_*_name_<容量>和product_*_pic_<容量>),还可以用正则表达式直接提取容量部分,进一步提升效率:

import re

final_dict = {}
# 匹配键中的容量部分(大写L结尾)
key_pattern = re.compile(r'(\d+L)$')
# 匹配值中的容量部分(小写l结尾)
value_pattern = re.compile(r'(\d+l)$')

for key, value in main_dict.items():
    key_match = key_pattern.search(key)
    value_match = value_pattern.search(value)
    if key_match and value_match:
        # 转换为统一格式后比较
        if key_match.group(1).lower() == value_match.group(1):
            final_dict[key] = value

这种方式无需依赖checker_dict,直接通过正则提取容量进行匹配,适合格式标准化的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:18:41