Python 删除字典项
我试图在不使用Python 删除字典项,python,dictionary,Python,Dictionary,我试图在不使用del的情况下删除一个项目,我有以下代码 d = {'Red': 1, 'Green': 2, 'Blue': 3} def removeKey(dicts, keys): for k,v in dicts.iteritems(): if k!= keys: dicts.update({k:v}) else: continue return dicts print removeK
del
的情况下删除一个项目,我有以下代码
d = {'Red': 1, 'Green': 2, 'Blue': 3}
def removeKey(dicts, keys):
for k,v in dicts.iteritems():
if k!= keys:
dicts.update({k:v})
else:
continue
return dicts
print removeKey(d, 'Red')
这会打印所有内容,包括“红色”。我做错了什么?您的代码实际上从未删除密钥–相反,如果密钥不是要删除的密钥,它只会更新原始字典;但是,它对要删除的键没有任何作用 一个选项是创建新词典:
def removeKey(dicts, keys):
new_dict = {}
for k,v in dicts.iteritems():
if k != keys:
new_dict[k] = v
return new_dict
您也不需要else:continue
,因为这是隐式的
您还可以使用字典理解来压缩此内容:
def removeKey(dicts, keys):
return {k: v for k, v in dicts.iteritems() if k != keys}
您可以使用
copy
模块深入复制dict
,以不修改原始dict
,并从复制的dict
中弹出键:
from copy import deepcopy
d = {'Red': 1, 'Green': 2, 'Blue': 3}
def removeKey(d, key):
d = deepcopy(d)
d.pop(key, None)
return d
print removeKey(d, 'Red')
# prints {'Green': 2, 'Blue': 3}
为什么不使用pop方法?您在dict上尝试过pop
方法吗?是的,我尝试过,这会起作用。我正在尝试创建一个新的字典,其中包含除作为参数传递的键之外的所有其他键。使用deepcopy而不只是执行类似d2=d.copy()
和返回d2
?d.copy()的操作的任何原因执行浅复制,而深度复制(d)执行深度复制