Как добавить новое значение ключа в словарь

#python #python-3.x #dictionary

Вопрос:

 contacts = {'John Smith': '1-123-123-123',
            'Jane Smith': '1-102-555-5678',
            'John Doe': '1-103-555-9012'}


def add_contact(contacts, name, number):
    """
    Add a new contact (name, number) to the contacts list.
    """
    if name in contacts:
        print(name, "is already in contacts list!")
    else:
        contacts[name] = number

print(add_contact(contacts, 'new_guy', '1234'))
 

Когда я печатаю это, я получаю none

но если я добавлю еще одну строку print(contacts)

это даст мне none и новый словарь с 'new_guy' :'1234'. Каким правильным способом распечатать новый словарь без печати none ?

Комментарии:

1. Вы правильно добавляете в словарь. Вы печатаете неправильно. В инструкции print выводится результат выполнения функции. Ваша функция ничего не возвращает.

2. Верно. Поскольку ваша функция изменяется на месте, не печатайте ее. Тогда просто позвони add_contact(contacts, 'new_guy', '1234') print(contacts) .

3. Это будет работать так, как написано, если вы просто добавите return contacts в конце своей add_contact функции.

Ответ №1:

Так, как у вас есть прямо сейчас, вы печатаете то, что возвращает функция (а это не так). Все, что вам нужно сделать, это отделить свой функциональный вызов и распечатать инструкцию следующим образом:

     add_contact(contacts, 'new_guy', '1234')
    print(contacts)
 

Ответ №2:

 def add_contact(name, number):
    """
    Add a new contact (name, number) to the contacts list.
    """
    if name in contacts:
        print(name, "is already in contacts list!")
    else:
        contacts[name] = number
    return contacts #put a return statement that will return the updated contacts dictionary

print(add_contact('John Doe', '1234'))


#for simplified version try a dictionary comprehension:
#using the dict.update(), we can use a comprehension inside to iterate from the contacts itself and have a condition if the name is already exists
contacts.update({key: value for key, value in contacts.items() if key not in contacts})

#tho, we can't have a print statement that will tell if the name already exist in the contacts
print(contacts)

>>>output: {'John Smith': '1-123-123-123', 'Jane Smith': '1-102-555-5678', 'John Doe': '1-103-555-9012'}
 

Ответ №3:

Вы правильно добавляете в словарь. Проблема в вашем заявлении о печати.

Измените это:

print(add_contact(contacts, 'new_guy', '1234'))

Вам нужно немного отделить это.

 add_contact(contacts, 'new_guy', '1234')
print(contacts)
 

Кроме того, поскольку ваш contacts словарь объявлен глобально, вы не нужно передавать его в функцию следует назвать это как-то по-другому в функции для ясности. Вы можете изменить функцию на:

 def add_contact(current_contacts, name, number):
 

Но не для того, чтобы измениться и внутри функции.

 if name in current_contacts:
        print(name, "is already in contacts list!")
    else:
        current_contacts[name] = number
 

Окончательный код:

 contacts = {'John Smith': '1-123-123-123',
            'Jane Smith': '1-102-555-5678',
            'John Doe': '1-103-555-9012'}


def add_contact(current_contacts, name, number):
    """
    Add a new contact (name, number) to the contacts list.
    """
    if name in current_contacts:
        print(name, "is already in contacts list!")
    else:
        current_contacts[name] = number


add_contact(contacts, 'new_guy', '1234')
print(contacts)

 

Комментарии:

1. Советовать ему полагаться на глобальный — плохой совет. Я бы удалил это предложение. Глобалы — это зло.

2. ОП add_contact будет работать с любым словарем контактов. Это просто совпадение, что он имеет то же название, что и глобальный. Переход на использование глобального вместо этого уменьшает функциональность. Это не имеет никакого значения для опубликованного примера, но должно быть отмечено в вашем комментарии.

3. @tdelaney Это правда, я просто не думал об этом, учитывая, что он использует одно и то же имя, и именно поэтому это не должно быть одно и то же имя. Я отредактирую его, чтобы изменить.