Вы удаляете 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'}
Если ваши значения являются списками и y ou нужно удалить только одно из значений, тогда вам нужно использовать 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']}
Pro совет: показать нам, что происходит, и то, что должно было произойти вместо этого. В этом случае нет сообщений об ошибках, о чем стоит сказать. –
Python не имеет функций 'void'. * Все функции * в python возвращают что-то ... если вы явно не возвращаете что-то, python добавляет 'return None' к концу функции для вас. – SethMMorton