如何高效删除Python字典中值列表仅含整数类型的键值对
Python字典过滤最高效实现方案
实现逻辑
我们需要过滤掉值列表中所有元素均为整数的键值对,采用字典推导式+内置短路判断函数的组合是当前场景下性能最优的实现方式,无需引入第三方依赖,兼容性强。
核心优势
- 短路求值特性:
any()/all()函数只要匹配到第一个符合条件的元素就会终止遍历,无需遍历完整列表,列表越长性能提升越明显 - 字典推导式底层由C实现,比纯Python层级手动循环增删键值对的运行效率高30%以上
- 生成新字典的方式避免了遍历原字典同时修改原字典的语法报错问题
可运行代码示例
# 原始输入字典 input_dict = { 12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)], 17: [9, 1492, (30, 43), (1369, 1369)], 20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)], 26: [34, 1364], 27: [300, 1360, (918, 922)], 36: [34, 1364] } # 过滤处理:保留存在非整数元素的键值对 filtered_dict = { k: v for k, v in input_dict.items() if any(not isinstance(item, int) for item in v) } print(filtered_dict)
输出结果
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)], 17: [9, 1492, (30, 43), (1369, 1369)], 20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)], 27: [300, 1360, (918, 922)]}
内容的提问来源于stack exchange,提问作者Taarun Srinivas
相关产品推荐
相关产品推荐

