在Python中更新嵌套字典的值

时间:2019-02-10 05:07:53

标签: dictionary nested

我有一个嵌套的字典

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:词典在迭代错误期间更改了大小。我对更新进行了一些研究,还查看了这个stackoverflow讨论Update value in nested dictionary - Python

我无法弄清楚如何根据用户输入的内容来指向代码来选择名字或姓氏。一些提示会有所帮助。

先谢谢了。

**在其他讨论中,由于“ 3.x,因为键返回的是迭代器而不是列表”,因此在Python 3中似乎不起作用。 我尝试先弹出,然后更新

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 :(得分:0)

此代码正在执行我想要的操作。可能是我的问题对此不太清楚

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'}}