Как напечатать только 1 элемент из словаря - PullRequest
0 голосов
/ 18 января 2019

Я недавно только начал изучать Python и обычно находил ответы на свои проблемы в Интернете, но, похоже, не могу найти правильное решение для этой проблемы. Я создал словарь с 3 контактами, и я хочу напечатать 1 контакт из списка с помощью оператора if.

contacts = {
    "John" : 938477566,
    "Jack" : 938377264,
    "Jill" : 947662781
}

if "John" in contacts: print ("Contact details: %s %i" % contacts.items()[0])

Это вывод, который я ищу:

Контактные данные: Джон 938477566

Но я продолжаю получать это

Traceback (последний вызов был последним): Файл "C: \ Users \ user \ Documents \ asega \ python \ objectsclasses \ exerc3.py", строка 31, в print («Контактная информация:% s% i»% contacts.items () [0]) Ошибка типа: объект dict_items не поддерживает индексирование

Спасибо

Ответы [ 5 ]

0 голосов
/ 18 января 2019

contacts.items() возвращает пары ключ-значение. В вашем случае это будет что-то вроде

(("John", 938477566), ("Jack", 938377264), ("Jill", 947662781))

За исключением того, что в Python 3 это похоже на генератор, а не список. Поэтому вам нужно будет сделать list(contacts.items()), если вы хотите проиндексировать его, что объясняет ваше сообщение об ошибке. Однако, даже если вы сделали list(contacts.items())[0], как описано выше, вы получите первую пару ключ-значение.

То, что вы пытаетесь сделать, это получить значение ключа, если указанный ключ существует, и contacts.get(key, value_if_key_doesnt_exist) сделает это за вас.

contact = 'John'
# we use 0 for the default value because it's falsy,
# but you'd have to ensure that 0 wouldn't naturally occur in your values
# or any other falsy value, for that matter.
details = contacts.get(contact, 0)
if details:
    print('Contact details: {} {}'.format(contact, details))
else:
    print('Contact not found')
0 голосов
/ 18 января 2019

Вы можете сделать это так. Если вы уверены, что в словаре присутствует слово «Джон», в выражении if нет необходимости. По-другому, вы можете написать это .. ваш выбор

contacts = {
    "John" : 938477566,
    "Jack" : 938377264,
    "Jill" : 947662781
}
print("Contact details: %s %i" % ("John", contacts["John"]))
0 голосов
/ 18 января 2019

Прежде всего, его словарь, а не список, вы можете получить доступ к элементам из списка путем индексации, а в словаре это невозможно, Вы можете получить доступ к элементам с помощью клавиши

contacts = {
    "John" : 938477566,
    "Jack" : 938377264,
    "Jill" : 947662781
}

for k,v in contacts.items():
    print(k,v)

или контакты ['Джон'] вы можете получить доступ к значению

0 голосов
/ 18 января 2019

Словари не поддерживают индексирование, поэтому для печати "Джон" вы не можете индексировать его, однако следующий код может содержать слово:

if "John" in contacts:
   print("Contact details:","John",contacts["John"])

Надеюсь, это поможет

0 голосов
/ 18 января 2019

Нет необходимости проверять условие if, просто используйте get, чтобы получить соответствующее значение и вернуть -1, если ключ отсутствует

contacts = {
    "John" : 938477566,
    "Jack" : 938377264,
    "Jill" : 947662781
}

contacts.get('John',-1) # -1 will be returned if key is not found

Форматирование печати

name_to_search='John'
print("Contact details: %s %i" % (name_to_search, contacts.get(name_to_search,-1)))

или

name_to_search='John'
print("Contact details: {} {}" .format(name_to_search, contacts.get(name_to_search,-1)))
...