我正在尝试创建一个从字典中删除字符串的 void 函数。
我需要确保该键在字典中,然后该值在该特定键中。
这是我迄今为止所拥有的,但似乎存在某种困境。有什么建议吗?
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del n2
if d1[n1] == []:
del n1
我正在尝试创建一个从字典中删除字符串的 void 函数。
我需要确保该键在字典中,然后该值在该特定键中。
这是我迄今为止所拥有的,但似乎存在某种困境。有什么建议吗?
def f(d, n1, n2):
if n1 in d1 and d1[n1] == n2:
del n2
if d1[n1] == []:
del n1
您正在删除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']}
我建议使用 dict.pop(key) 而不是 del。
你可以这样做:
def f(d, n1, n2):
if d.has_key(n1) and d[n1] == n2:
d.pop(n1)
return d
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}