Вывести словарь из списка по ключу
Помогите разобраться с кодом не получается вывести только Владелец документа: Аристарх Павлов
documents = [{'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'}, {'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'}, {'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}]
directories = {'1': ['2207 876234', '11-2'], '2': ['10006'], '3': []}
def p():
num = input("Введите номер документа:")
for dic in documents:
for key,value in dic.items():
if key == "number" and value == num:
print(dic["name"])
elif key == "number" and value != num:
print("Документ не найден в базе")
p()
Помогите, пожалуйста с кодом Задание 1 Пункт 1. Пользователь по команде «p» может узнать владельца документа по его номеру. Примеры работы:
Введите команду: p
Введите номер документа: 10006 Результат: Владелец документа: Аристарх Павлов
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Вы определитесь с циклами и их областями видимости. в вашем случае работать будет так:
def p():
num = input("Введите номер документа:")
for dic in documents:
for key,value in dic.items():
if key == "number" and value == num:
return dic["name"]
return "Документ не найден в базе"
print(p())
Автор решения: Vitalizzare
→ Ссылка
Внутренний цикл for key, value in dic.items(): ...
вам не нужен, обращайтесь к номеру документа напрямую:
def print_owner_by_doc_number():
owner = None
num = input("Введите номер документа: ")
for dic in documents:
if dic["number"] == num:
owner = dic["name"]
break
if owner is None:
print(f'Документ №"{num}" в базе не найден')
else:
print(f'Владелец документа №"{num}": {owner}')
def main():
help = '\n'.join([
'Доступные комманды:',
' p - по номеру документа найти владельца',
' h - показать справочное сообщение',
' q - завершить работу'])
print(help)
while True:
command = input('Введите команду: ')
if command == 'p':
print_owner_by_doc_number()
elif command == 'h':
print(help)
elif command == 'q':
break
main()
Если предполагается, что в базе может быть несколько разных документов с одним и тем же номером, тогда соберите их в список. Например:
num = ...
owners = [dic['name'] for dic in documents if dic['number'] == num]