Надо вывести все значения словарей в списке

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 можно почитать, например, в ответах к этому вопросу.

→ Ссылка