如何从嵌套字典构成的列表中删除指定的目标字典元素
解决方案
Python 天然支持嵌套字典的全等判断,只要两个字典所有层级的键值对完全匹配,==运算符就会返回True,不需要单独逐层对比键值,可直接基于该特性过滤目标元素。
方案1:列表推导式(推荐)
直接生成过滤后的新列表,性能稳定且不会出现遍历删除的索引错位问题:
# 原始嵌套字典列表 original_list = [ {'rule': {'actions': {'allow': False}, 'dl_type': 2048, 'ipv4_dst': '192.168.50.0/24', 'ipv4_src': '192.168.50.20'}}, {'rule': {'actions': {'allow': False}, 'dl_type': 2048, 'ipv4_dst': '192.168.50.0/24', 'ipv4_src': '192.168.50.10'}}, {'rule': {'actions': {'allow': True}}} ] # 需要删除的目标字典 target = {'rule': {'actions': {'allow': False}, 'dl_type': 2048, 'ipv4_dst': '192.168.50.0/24', 'ipv4_src': '192.168.50.10'}} # 过滤掉匹配的元素 filtered_list = [item for item in original_list if item != target] # 如需直接修改原列表,直接赋值即可 # original_list = filtered_list
方案2:原列表遍历删除
如果需要直接在原列表上操作,必须倒序遍历索引避免正序删除导致的元素错位漏检:
for idx in range(len(original_list)-1, -1, -1): if original_list[idx] == target: del original_list[idx]
说明:字典的全等判断不依赖键的排列顺序,只要所有层级的键值对完全一致就会判定为相等,无需担心键的排序差异问题。
内容的提问来源于stack exchange,提问作者Andy Garcia
相关产品推荐
相关产品推荐

