我正在尝试创建一个从字典中删除字符串的void函数。
我需要确保密钥在字典中,然后该值在该特定密钥中。
这是我迄今为止所做的,但似乎存在某种困境。有什么建议吗?
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del n2
if d1[n1] == []:
del n1
答案 0 :(得分:3)
您正在移除n2
和n1
本地名称,并且未触及字典。
要从字典中删除,您需要将del
应用于密钥:
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del d1[n1]
您可能想要使用一些更具描述性的名称:
def remove_item(dct, key, value):
if key in dct and dct[key] == value:
del dct[key]
并且,因为测试代码总是一个好主意,一个演示:
>>> demo = {'foo': 'bar', 'spam': 'ham'}
>>> def remove_item(dct, key, value):
... if key in dct and dct[key] == value:
... del dct[key]
...
>>> remove_item(demo, 'monty', 'python')
>>> demo
{'spam': 'ham', 'foo': 'bar'}
>>> remove_item(demo, 'spam', 'eggs')
>>> demo
{'spam': 'ham', 'foo': 'bar'}
>>> remove_item(demo, 'spam', 'ham')
>>> demo
{'foo': 'bar'}
如果您的值是列表,并且您只需删除其中一个值,那么您需要使用list.remove()
,或使用列表推导。
首先是list.remove()
选项,它只删除一个值。如果重复该值,则仅删除第一个匹配项:
def remove_item(dct, key, value):
if key in dct:
if dct[key] == value:
del dct[key]
elif isinstance(dct[key], list) and value in dct[key]:
dct[key].remove(value)
列表理解将删除值的所有副本:
def remove_item(dct, key, value):
if key in dct:
if dct[key] == value:
del dct[key]
elif isinstance(dct[key], list):
dct[key] = [v for v in dct[key] if v != value]
list.remove()
的演示:
>>> demo = {'foo': ['bar', 'baz', 'bar']}
>>> def remove_item(dct, key, value):
... if key in dct:
... if dct[key] == value:
... del dct[key]
... elif isinstance(dct[key], list) and value in dct[key]:
... dct[key].remove(value)
...
>>> remove_item(demo, 'foo', 'bar')
>>> demo
{'foo': ['baz', 'bar']}
列表理解的演示:
>>> demo = {'foo': ['bar', 'baz', 'bar']}
>>> def remove_item(dct, key, value):
... if key in dct:
... if dct[key] == value:
... del dct[key]
... elif isinstance(dct[key], list):
... dct[key] = [v for v in dct[key] if v != value]
...
>>> remove_item(demo, 'foo', 'bar')
>>> demo
{'foo': ['baz']}
答案 1 :(得分:0)
我建议使用dict.pop(key)而不是del。
你可以这样做:
def f(d, n1, n2):
if d.has_key(n1) and d[n1] == n2:
d.pop(n1)
return d
答案 2 :(得分:0)
d = {'a': 1, 'b': 2}
def fun(_d, _k, _v):
return {key: _d[key] for key in _d
if not (_k == key and _v == _d[key])}
print fun(d, 'b', 1)
输出:
{'a': 1, 'b': 2}