向嵌套字典中添加键-值对。
向嵌套字典中添加键-值对。
我在向嵌套字典中添加键值对时遇到了一些问题。新的键值对似乎被添加到了外部字典的所有条目中,而不仅仅是我想要的嵌套字典。
以下是一个例子:
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'}}
为什么会这样,并且我应该如何重新编写代码来修复这个错误?
问题的原因是每次添加键值对时,它都会覆盖掉原有的字典。这是因为每次执行mydictionary['key1'] = {'subkey1': 'value1'}
语句时,它都会重新创建一个包含一个键值对的字典,并将其赋值给mydictionary['key1']
。这导致原来的字典被覆盖掉了。
要解决这个问题,我们需要先检查'key1'
是否已经存在于mydictionary
中。如果存在,我们需要将新的键值对添加到已存在的字典中;如果不存在,我们需要先创建一个空字典,然后再将新的键值对添加到该字典中。
以下是解决方法的示例代码:
if 'key1' in mydictionary: mydictionary['key1']['subkey1'] = 'value1' else: mydictionary['key1'] = {'subkey1': 'value1'}
通过这种方式,我们可以避免覆盖原有的字典,而是将新的键值对添加到已有字典中或创建一个新的字典。这样就能正确地向嵌套字典中添加键值对了。