-3

Is there a native function to flatten a nested dictionary to an output dictionary where keys and values are in this format:

_dict2 = {
  'this.is.an.example': 2,
  'this.is.another.value': 4,
  'this.example.too': 3,
  'example': 'fish'
}

Assuming the dictionary will have several different value types, how should I go about iterating the dictionary?

martineau
  • 119,623
  • 25
  • 170
  • 301
zach
  • 11
  • 1
  • 4

1 Answers1

4

You want to traverse the dictionary, building the current key and accumulating the flat dictionary. For example:

def flatten(current, key, result):
    if isinstance(current, dict):
        for k in current:
            new_key = "{0}.{1}".format(key, k) if len(key) > 0 else k
            flatten(current[k], new_key, result)
    else:
        result[key] = current
    return result

result = flatten(my_dict, '', {})

Using it:

print(flatten(_dict1, '', {}))

{'this.example.too': 3, 'example': 'fish', 'this.is.another.value': 4, 'this.is.an.example': 2}
Matthew Franglen
  • 4,441
  • 22
  • 32