Удалить словарь из списка словарей
У меня есть список со словарями. Где указано имя человека, откуда и куда он направляется. Но у одного словаря нет значения "from". Как удалить этот словарь из списка?
tour = [
{
"name": "Александр",
"from": "Москва",
"to": "Казань"
},
{
"name": "Алиса",
"from": "Москва",
"to": "Казань"
},
{
"name": "Сергей",
"to": "Казань"
}
]
Я пробовал сделать это несколькими способами, но ничего не выходит
#способ 1
new_tour = [i for i in tour if (i['from'] == None)]
#способ 2
new_tour = list(filter(lambda i: i['from'] != None, tour))
#способ 3
for i in range(len(tour)):
if tour[i]['from'] == None:
del tour[i]
break
Ответы (3 шт):
Автор решения: user207200
→ Ссылка
keys = {'name', 'from', 'to'}
valid_tour = list(filter(lambda d: d.keys() == keys, tour))
print(valid_tour)
# ({'name': 'Александр', 'from': 'Москва', 'to': 'Казань'},
# {'name': 'Алиса', 'from': 'Москва', 'to': 'Казань'})
Автор решения: Сhurina Margaery
→ Ссылка
Если хотите оставить решение своим способом, можно такой вариант:
for i in range(len(tour)):
if "from" not in tour[i].keys(): # проверяем есть ли ключ "from" в ключах словаря
del tour[i]
break
print(tour)
Автор решения: CrazyElf
→ Ссылка
Починил вам все три способа, хотя, в общем-то, это уже сделали до меня по отдельности в разных ответах и комментариях:
#способ 1
new_tour = [i for i in tour if 'from' in i]
#способ 2
new_tour = list(filter(lambda i: 'from' in i, tour))
#способ 3
for i in range(len(tour)):
if not 'from' in tour[i]:
del tour[i]
break