当数据具有现有键时更新嵌套字典

Updating nested dictionaries when data has existing key(当数据具有现有键时更新嵌套字典)

本文介绍了当数据具有现有键时更新嵌套字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试更新嵌套字典中的值,而不会在键已经存在时覆盖以前的条目.例如,我有一本字典:

I am trying to update values in a nested dictionary, without over-writting previous entries when the key already exists. For example, I have a dictionary:

  myDict = {}
  myDict["myKey"] = { "nestedDictKey1" : aValue }

给予,

 print myDict
>> { "myKey" : { "nestedDictKey1" : aValue }}

现在,我想在 "myKey"

myDict["myKey"] = { "nestedDictKey2" : anotherValue }}

这将返回:

print myDict
>> { "myKey" : { "nestedDictKey2" : anotherValue }}

但我想要:

print myDict
>> { "myKey" : { "nestedDictKey1" : aValue , 
                 "nestedDictKey2" : anotherValue }}

有没有办法用新值更新或附加 "myKey" 而不覆盖以前的值?

Is there a way to update or append "myKey" with new values, without overwriting the previous ones?

推荐答案

这是一个非常好的处理嵌套字典的通用解决方案:

import collections
def makehash():
    return collections.defaultdict(makehash)

这允许在任何级别设置嵌套键:

That allows nested keys to be set at any level:

myDict = makehash()
myDict["myKey"]["nestedDictKey1"] = aValue
myDict["myKey"]["nestedDictKey2"] = anotherValue
myDict["myKey"]["nestedDictKey3"]["furtherNestedDictKey"] = aThirdValue

对于单层嵌套,可以直接使用defaultdict:

For a single level of nesting, defaultdict can be used directly:

from collections import defaultdict
myDict = defaultdict(dict)
myDict["myKey"]["nestedDictKey1"] = aValue
myDict["myKey"]["nestedDictKey2"] = anotherValue

这是一种只使用 dict 的方法:

And here's a way using only dict:

try:
  myDict["myKey"]["nestedDictKey2"] = anotherValue
except KeyError:
  myDict["myKey"] = {"nestedDictKey2": anotherValue}

这篇关于当数据具有现有键时更新嵌套字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:当数据具有现有键时更新嵌套字典

基础教程推荐