Если вы хотите один лайнер, вы можете использовать выражение генератор с next()
, какие короткие замыкания, как только вы обнаружили, что первый элемент, чтобы удалить, и затем использовать list.remove()
:
l.remove(next(d for d in l if d['name'] == value))
Пример:
>>> l = [{'name':'bob','age':12},{'name':'jill','age':34}]
>>> value = 'bob'
>>> l.remove(next(d for d in l if d['name'] == value))
>>> l
[{'name': 'jill', 'age': 34}]
Примечание это повысит StopIteration
является value
не найден, который можно избежать, но это немного больше, потому что, хотя next()
имеет аргумент по умолчанию, list.remove()
не:
>>> l = [{'name':'bob','age':12},{'name':'jill','age':34}]
>>> value = 'bob'
>>> value_to_remove = next((d for d in l if d['name'] == value), None)
>>> 'Value not in list' if value_to_remove is None else l.remove(value_to_remove)
>>> l
[{'name': 'jill', 'age': 34}]
>>> value_to_remove = next((d for d in l if d['name'] == value), None)
>>> 'Value not in list' if value_to_remove is None else l.remove(value_to_remove)
'Value not in list'
Ваш пример удаляет только 'ключ name', а не весь словарь. – Jkdc
Возможный дубликат [Как удалить ключ из словаря python?] (Http://stackoverflow.com/questions/11277432/how-to-remove-a-key-from-a-python-dictionary) – MYGz
Это неправильная практика для перезаписи по умолчанию 'list' – Kh40tiK