python - 如何使用另一个字典作为 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
解决方案
实际上没有必要使用检查器字典。由于您的数据格式正确(音量位于字符串的末尾。您只需访问键的音量和字符串的小写值并检查它们是否匹配。如果是,请将其添加到您的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'}
推荐阅读
- java - 如何在 Java 中的字符串上应用 MD5withRSA
- javascript - 如何计算表中一个字段的总和并将其放入输入中
- spss - 如何在SPSS中空白特定年份的所有案例?
- gradle - 即使我在 buildscript 的存储库中添加了我的插件,也没有在 maven 中央存储库中搜索
- ios - 如何更改 MGLPolyline 的颜色?
- c++ - 无法在 C++ 中删除动态数组的内容
- c# - 尝试聚焦 xamarin.forms 中的条目时,字段初始值设定项无法引用非静态字段、方法或属性错误
- c++ -
如何在“(”令牌双向链表::Node::Node(data)之前修复“预期的构造函数、析构函数或类型转换” - java - 从android发送时令牌显示已过期
- bluetooth-lowenergy - 网状消息操作码