有没有办法从Python中删除字典中的项目?
另外,如何从字典中删除项目以返回副本(即,不修改原始文件)?
除了给定的密钥存在之外,还有其他方法可以删除字典中的项目,除了:
if key in mydict:
del mydict[key]
Run Code Online (Sandbox Code Playgroud)
场景是我给了一组要从给定字典中删除的键,但我不确定它们是否都存在于字典中.以防我错过了更有效的解决方案.
给定一个关联数组:
array("key1" => "value1", "key2" => "value2", ...)
Run Code Online (Sandbox Code Playgroud)
考虑到密钥,我如何去除某个键值对?
按值从字典中删除项目的最佳方法是什么,即项目的密钥未知时?这是一个简单的方法:
for key, item in some_dict.items():
if item is item_to_remove:
del some_dict[key]
Run Code Online (Sandbox Code Playgroud)
还有更好的方法吗?在迭代它时从字典中变异(删除项目)有什么问题吗?
在另一个问题中,接受的答案建议用try/except块替换Python代码中的(非常便宜的)if语句以提高性能.
抛开编码样式问题,并假设从未触发异常,与异常处理程序相比,具有异常处理程序(与性能相比)有多大差异,而不是具有比较为零的if语句?
我有一个python dict,我想静静地从我的字典中删除其中一个None和''键,所以我想出了这样的东西:
try:
del my_dict[None]
except KeyError:
pass
try:
del my_dict['']
except KeyError:
pass
Run Code Online (Sandbox Code Playgroud)
如您所见,它的可读性较差,导致我编写重复的代码.所以我想知道python中是否有一个方法从dict中删除任何键而不抛出键错误?
有时候,我只想为一个条目列表执行一个函数 - 例如:
for x in wowList:
installWow(x, 'installed by me')
Run Code Online (Sandbox Code Playgroud)
有时我需要这些东西用于模块初始化,所以我不希望在全局命名空间中有像x这样的足迹.一种解决方案是将map与lambda一起使用:
map(lambda x: installWow(x, 'installed by me'), wowList)
Run Code Online (Sandbox Code Playgroud)
但这当然会创建一个很好的列表[无,无,...]所以我的问题是,如果有一个没有返回列表的类似函数 - 因为我只是不需要它.
(当然我也可以使用_x,因此不会留下可见的足迹 - 但地图解决方案看起来很整洁......)
认为以dict.pop原子方式运行似乎是合理的,因为KeyError如果指定的键丢失并且没有提供默认值则会引发,如下所示:
d.pop(k)
Run Code Online (Sandbox Code Playgroud)
但是,文档似乎并没有专门针对这一点,至少在专门记录的部分没有dict.pop.
if k in d: del d[k]
Run Code Online (Sandbox Code Playgroud)
那时候,我并没有想到一把钥匙可能存在的潜在条件if,而不是当时del.如果dict.pop确实提供了原子替代方案,那么我应该在我的答案中注意到.
在下面做一个单行的方式吗?
myDict = {}
if 'key' in myDic:
del myDic['key']
Run Code Online (Sandbox Code Playgroud)
谢谢
我对 Mongo 的 Web 服务调用返回以下 JSON。我需要迭代此 JSON 值并删除项目 - Product_language,因为它包含 NULL/空字符串。
关于如何做到这一点有什么想法吗?
Python 3.4 版本。
{
"prod_doc_key" : "613509",
"metadata" : {
"channel_availability_for" : {
"description" : "Kiosk and Web",
"id" : 0
},
"dd_sold_out_flag" : 0,
"dd_units_sold_flag" : 0,
"display_type_id" : {
"id" : 0
},
"preorder_flag" : 0,
"price_in_cart_flag" : 0,
"product_language" : "",
"product_type" : {
"id" : 0,
"name" : "Product"
},
"promotion_flag" : 0,
"published" : 1,
"rebate_flag" : 0
}
Run Code Online (Sandbox Code Playgroud)
}
python ×9
dictionary ×5
del ×2
arrays ×1
exception ×1
iteration ×1
json ×1
mongodb ×1
performance ×1
php ×1
python-2.7 ×1