向嵌套字典中添加键-值对。

9 浏览
0 Comments

向嵌套字典中添加键-值对。

我在向嵌套字典中添加键值对时遇到了一些问题。新的键值对似乎被添加到了外部字典的所有条目中,而不仅仅是我想要的嵌套字典。

以下是一个例子:

mykeys = ['key1', 'key2', 'key3']
mydictionary = dict.fromkeys(mykeys, {})
mydictionary['key1']['subkey1'] = 'value1'
mydictionary

我期望看到以下结果,只有在'key1'字典中添加了'subkey1':

{'key1': {'subkey1': 'value1'},
 'key2': {},
 'key3': {}}

然而,它将subkey1/value1对添加到了外部字典的每个元素中:

{'key1': {'subkey1': 'value1'},
 'key2': {'subkey1': 'value1'},
 'key3': {'subkey1': 'value1'}}

为什么会这样,并且我应该如何重新编写代码来修复这个错误?

0
0 Comments

问题的原因是每次添加键值对时,它都会覆盖掉原有的字典。这是因为每次执行mydictionary['key1'] = {'subkey1': 'value1'}语句时,它都会重新创建一个包含一个键值对的字典,并将其赋值给mydictionary['key1']。这导致原来的字典被覆盖掉了。

要解决这个问题,我们需要先检查'key1'是否已经存在于mydictionary中。如果存在,我们需要将新的键值对添加到已存在的字典中;如果不存在,我们需要先创建一个空字典,然后再将新的键值对添加到该字典中。

以下是解决方法的示例代码:

if 'key1' in mydictionary:
    mydictionary['key1']['subkey1'] = 'value1'
else:
    mydictionary['key1'] = {'subkey1': 'value1'}

通过这种方式,我们可以避免覆盖原有的字典,而是将新的键值对添加到已有字典中或创建一个新的字典。这样就能正确地向嵌套字典中添加键值对了。

0