Надо вывести все значения словарей в списке
documents = [
{"type": "passport", "number": "2207 876234", "name": "Василий Гупкин"},
{"type": "invoice", "number": "11-2", "name": "Геннадий Покемонов"},
{"type": "insurance", "number": "10006", "name": "Аристарх Павлов"}
]
def lst(values):
for value in values:
for key in value.values():
return key
print(lst(documents))
надо найти все значения из словарей но вот не задача, если return под циклом то выводит только одно значение, а нужно все из всех словарей, тогда выношу return из под цикла и получай ошибку
IndentationError: expected an indented block
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Вариантов много как это можно реализовать, например можно использовать yield, чтобы возвращать значения по одному и при этом не выходить сразу из функции, как это происходит при использовании return. Но по полученному результату тогда нужно как-то проитерироваться, это тоже можно сделать разными способами, например, использовать *:
documents = [
{"type": "passport", "number": "2207 876234", "name": "Василий Гупкин"},
{"type": "invoice", "number": "11-2", "name": "Геннадий Покемонов"},
{"type": "insurance", "number": "10006", "name": "Аристарх Павлов"}
]
def lst(values):
for value in values:
for key in value.values():
yield key # <-- возвращаем значения по одному
print(*lst(documents)) # <-- разворачиваем результат в список значений через *
Вывод:
passport 2207 876234 Василий Гупкин invoice 11-2 Геннадий Покемонов insurance 10006 Аристарх Павлов
Чуть подробнее про различия yield и return можно почитать, например, в ответах к этому вопросу.