我试图在不使用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')
这会打印包括' Red'在内的所有内容。我做错了什么?
答案 0 :(得分:2)
您的代码实际上永远不会删除密钥 - 相反,如果密钥不是要删除的密钥,它只是就地更新原始字典;但是,它没有对要删除的密钥做任何事情。
一种选择是创建一个新词典:
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}
答案 1 :(得分:1)
您可以使用dict
模块对copy
进行深层复制,以免修改原始dict
,并pop
复制dict
中的密钥:< / p>
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}