
本文旨在指导读者如何根据特定条件,高效地从一个Python字典中创建两个新的字典。通过迭代原始字典的键值对,并结合any()函数进行条件判断,我们可以将符合条件的键值对分别添加到两个目标字典中,从而实现字典的过滤和拆分。本文提供清晰的代码示例和详细的解释,帮助读者理解和应用这一技术。
在Python编程中,经常会遇到需要根据特定条件过滤字典的情况。例如,我们可能需要将一个包含多种类型数据的字典,拆分成多个只包含特定类型数据的字典。本文将介绍一种简洁高效的方法,利用Python的字典迭代和any()函数来实现这一目标。
基本原理
核心思想是遍历原始字典的每一个键值对,然后根据键值对中的值是否满足预设的条件,来决定将该键值对添加到哪个新的字典中。 为了提高效率,可以使用any()函数来判断一个值是否包含多个条件中的任意一个。
立即学习“Python免费学习笔记(深入)”;
代码示例
假设我们有一个字典 dct,需要根据其值中的特定字符串,将其拆分为两个新的字典 dict_C 和 dict_P。
dct={'48689': 'FINNIFTY02JAN24C20900', '46624': 'FINNIFTY09JAN24P20900', '40811':
'NIFTY14DEC23C20750', '40812': 'NIFTY14DEC23P20750', '40813': 'NIFTY14DEC23C20800', '40814':
'NIFTY14DEC23P20800', '40817': 'NIFTY14DEC23C20850', '40818': 'NIFTY14DEC23P20850', '40828':
'NIFTY14DEC23C20900', '40832': 'NIFTY14DEC23P20900', '40834': 'NIFTY14DEC23C20950', '40839':
'NIFTY14DEC23P20950'}
dict_C = {}
dict_P = {}
arrC = ["23C1", "23C2", "24C2", "24C1"]
arrP = ["23P1", "23P2", "24P2", "24P1"]
for key, value in dct.items():
if any(x in value for x in arrC):
dict_C[key] = value
elif any(x in value for x in arrP):
dict_P[key] = value
print("dict_C - ", dict_C)
print("dict_P - ", dict_P)代码解释
- 初始化字典: 首先,我们创建两个空字典 dict_C 和 dict_P,用于存储过滤后的键值对。
- 定义条件列表: arrC 和 arrP 分别存储了用于过滤的字符串列表。arrC用于筛选包含"23C1", "23C2", "24C2", "24C1" 任意一个字符串的键值对,arrP用于筛选包含"23P1", "23P2", "24P2", "24P1" 任意一个字符串的键值对。
- 迭代字典: 使用 dct.items() 方法迭代原始字典 dct 的每一个键值对。
- 条件判断: 对于每一个键值对,使用 any(x in value for x in arrC) 检查该值是否包含 arrC 中的任意一个字符串。如果包含,则将该键值对添加到 dict_C 中。
- 另一个条件判断: 如果值不包含 arrC 中的任何字符串,则使用 any(x in value for x in arrP) 检查该值是否包含 arrP 中的任意一个字符串。如果包含,则将该键值对添加到 dict_P 中。
- 输出结果: 最后,我们打印输出 dict_C 和 dict_P 的内容。
注意事项
- 如果一个值同时满足 arrC 和 arrP 的条件,则该键值对只会添加到 dict_C 中,因为 elif 保证了只有一个条件会被执行。
- 如果一个值不满足 arrC 和 arrP 的任何条件,则该键值对不会添加到任何一个新字典中。
- 这种方法适用于任何需要根据值的特定模式来过滤字典的场景。
总结
通过结合字典迭代和any()函数,我们可以高效地根据特定条件从一个字典中创建多个新的字典。 这种方法简洁易懂,并且具有良好的可读性,是处理字典过滤问题的常用技巧。 掌握这种方法可以帮助你更有效地处理和组织数据,提高代码的效率和可维护性。










