通过变量修改嵌套字典

时间:2019-01-25 22:21:50

标签: python dictionary

我对编程还比较陌生,正在尝试更好地了解如何在词典中更新值。我一直遇到的问题是,当我将字典的值设置为变量并尝试在函数中更新它时,该值无法正确更新。

test_dict = {
    'medals': {
    'bronze': 0,
    'silver': 0,
    'gold': 0,
    },
}

def add_medals_1(test_dict):
    test_dict['medals']['bronze'] += 10
    print(test_dict['medals']['bronze'])

add_medals_1(test_dict) # Updates value of bronze to 10
add_medals_1(test_dict) # Updates value of bronze to 20

def add_medals_2(test_dict):
    silver_medals = test_dict['medals']['silver']
    silver_medals += 10
    print(silver_medals)

add_medals_2(test_dict) # Updates value of silver to 10
add_medals_2(test_dict) # Value of silver remains at 10

在函数add_medals_1中,“ bronze”的值会正确更新,并在每次调用该函数时递增。 在函数add_medals_2中,“ silver”的值未正确更新且不会增加。我对此感到困惑,因为两个函数都相似,但没有产生我期望的输出。

2 个答案:

答案 0 :(得分:2)

问题是,在add_medals_2中,您不是在更新字典,而是在更新从字典中获取的副本。

赞:

def add_medals_2(test_dict):
    # 1) HERE, you are copying test_dict['medals']['silver']
    # to another memory location (variable) called silver_medals
    silver_medals = test_dict['medals']['silver']
    # 2) THEN, you update variable's value to += 10
    silver_medals += 10
    # You print the updated value
    print(test_dict)
    print(silver_medals)
    # BUT, test_dict was never updated in add_medals_2

答案 1 :(得分:1)

silver_medals = test_dict['medals']['silver']

这将复制左侧的值,并将其分配给右侧的名称。

silver_medals += 10

现在,您将左侧的名称分配给新值。这将不会更改字典中的值,因为不知道原始值来自何处。