Updating nested dictionaries when data has existing key

dictionary, nested, python, python-2.7

Solution

This is a very nice general solution to dealing with nested dicts:

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

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

And here's a way using only `dict`:

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

Problem

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 } ``` giving, ``` print myDict >> { "myKey" : { "nestedDictKey1" : aValue }} ``` Now, I want to add another entry , under `"myKey"` ``` myDict["myKey"] = { "nestedDictKey2" : anotherValue }} ``` This will return: ``` print myDict >> { "myKey" : { "nestedDictKey2" : anotherValue }} ``` But I want: ``` print myDict >> { "myKey" : { "nestedDictKey1" : aValue , "nestedDictKey2" : anotherValue }} ``` Is there a way to update or append `"myKey"` with new values, without overwriting the previous ones?

Original source

Related problems