首页 > 解决方案 > 如何使用另一个字典作为 Python 中的键来过滤字典?

问题描述

我创建了一个字典,之后将其上传到一个 excel 文件中,但它非常未经过滤。主字典如下所示:

我通过在键和值中匹配 product_x、product_n 等来填充字典。

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"
}

问题是,product_n_name 只能有 1l 体积的图片,product_q 只能有 200l 体积等(好吧,因为这些是我仅有的图片)。发生这种错误是因为在生成字典时,键会根据名称匹配与任何合适的值匹配,即使卷参数实际上是错误的。

所以我想出了另一个字典,它可以作为对字典进行排序并跳过错误值的键:(键中的 Ls 是大写字母)

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

但是,我真的不知道如何在没有大量嵌套 for 循环的情况下创建合并代码,这些循环最终会一遍又一遍地重写值。

我需要实现这样的事情:

final_dict = {}
for key, value in main_dict.items():
    for check_key, check_value in checker_dict.items():
        if checker_key in key corresponds with checker_value in value:
        # I know there is no such syntax, but still, I want them to be
        # checked every time for having both elements in original key 
        # and value
            final_dict[key] = value

标签: python

解决方案


实际上没有必要使用检查器字典。由于您的数据格式正确(音量位于字符串的末尾。您只需访问键的音量和字符串的小写值并检查它们是否匹配。如果是,请将其添加到您的final_dict. 这里有不同做同样的事情:

对于循环:

final_dict = {}
for key, value in main_dict.items():
    if value.split('_')[-1].lower() == key.split('_')[-1].lower():
        final_dict[key] = value

列表理解:

final = {k: v for k, v in main_dict.items() if v.split('_')[-1].lower() == k.split('_')[-1].lower()}

筛选:

dict(filter(lambda kv: extract_lower(kv[0]) == extract_lower(kv[1]), main_dict.items()))

输出:

{'product_x_name_1L': 'product_x_pic_1l',
 'product_y_name_4L': 'product_y_pic_4l',
 'product_z_name_20L': 'product_z_pic_20l'}

推荐阅读