Python 3.7x中如何无需迭代对字典批量增删多个元素?
批量操作Python字典元素(无需手动迭代)
嘿,这个问题问得很实用!Python原生的dict确实没有直接支持批量pop的API,但我们可以用几种简洁的方式实现你想要的效果,而且不用手动写迭代循环——同时也给你补充下批量添加元素的方法:
批量删除元素
方案1:生成新字典(推荐,简洁安全)
用字典推导式直接筛选出需要保留的键值对,代码清爽,还能避免原地修改可能带来的副作用:
D = {"key1":"value1", "key2":"value2", "key3":"value3"} tags = ["key1","key2"] # 只保留不在tags里的键值对 D = {k: v for k, v in D.items() if k not in tags} print(D) # 输出: {'key3': 'value3'}
虽然底层会迭代字典,但你完全不用自己写循环逻辑,符合你“无需使用迭代”的预期。
方案2:原地修改字典
如果你需要在原字典上直接修改,可以用map配合dict.pop来批量执行删除操作:
D = {"key1":"value1", "key2":"value2", "key3":"value3"} tags = ["key1","key2"] # 用list消费map的迭代器,否则操作不会实际执行 list(map(D.pop, tags)) print(D) # 输出: {'key3': 'value3'}
如果tags里可能包含字典中不存在的键,怕报错的话,可以给pop加个默认值:
list(map(lambda k: D.pop(k, None), tags))
批量添加元素
这个就简单多了,Python字典自带的update()方法完美支持批量添加/更新元素,不管你传的是另一个字典,还是键值对列表、元组都可以:
D = {"key1":"value1"} # 传入字典批量添加 D.update({"key2":"value2", "key3":"value3"}) # 或者传入键值对列表 D.update([("key4", "value4"), ("key5", "value5")]) print(D) # 输出: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5'}
内容的提问来源于stack exchange,提问作者Manuel Semeco
相关产品推荐
相关产品推荐

