Обновление значения вложенного словаря в Python - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть вложенный словарь

users = {'user502': {'firstname': 'James', 'lastname': 'Jones'}}

Пользователь может искать первымили фамилия и сможет обновить что-то еще.Я написал следующий код:

name_change=input('Enter name to change: ')
for key,value in users.items():
    for k,v in value.items():
        if name_change==v:
            #print('name found in', value.get(name_change))
            #print('name found in', value.get(k))
            print('name found in', k)
            updated_name=input('What would be the new name: ')
            users.update(k=updated_name)
            break
        else:
            print('name not found')

Я получаю RuntimeError: словарь изменил размер при ошибке итерации.Я провел некоторое исследование по обновлению, а также посмотрел на это обсуждение потока стека Значение обновления во вложенном словаре - Python

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

Спасибо заранее.

** Из другого обсуждения кажется, что в Python 3 он не работает из-за '3.x, потому что ключи возвращают итератор вместо списка.'Я попытался сначала сделать поп, а затем обновить

updated_name=input('What would be the new name: ')
           # users[k][v]=updated_name
            x= value.get(k)
            users.pop(x)
            users[x]=updated_name

Однако теперь я получаю KeyError: 'James'

1 Ответ

0 голосов
/ 10 февраля 2019

Этот код делает то, что я хотел.Может быть, мой вопрос был неясен, извините за это

print('Actual-', users)
name_change=input('Enter name to change: ')
for key,value in users.items():
    for k,v in value.items():
        if name_change==v:
            #print('name found in', value.get(name_change))
            #print('name found in', value.get(k))
            print('name found in', k)
            updated_name=input('What would be the new name: ')
            value[k]=updated_name
            break
        else:
            print('name not found')

    print("modified name:", users)

Вывод:

Actual- {'user502': {'lastname': 'Jones', 'firstname': 'James'}}
Enter name to change: Jones
name found in lastname
What would be the new name: January
modified name: {'user502': {'lastname': 'January', 'firstname': 'James'}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...