简体   繁体   中英

Delete key:value pair from dict in list in nested dict

Lets say I have this dict:

dictos = {
    "a": {
        "b": {
            "c": 3,
            "d": 4,
            "e": [],
            "f": [{"g": 5}, 'test', {"h": 6, "i": 7}]
        }
    }
}

And lets say I want to delete "c": 3 pair. What I am doing:

import dpath.util
path = "a/b/c"
dpath.util.delete(dictos, path)

It is working great. The output is:

{
  'a': {
    'b': {
      'd': 4,
      'e': [],
      'f': [{'g': 5}, 'test', {'h': 6, 'i': 7}]
    }
  }
}

The problem is when I am trying to delete key:value pair inside the list. Lets say I want to delete "h":6. So when doing:

path = "a/b/f[2]/h"
dpath.util.delete(dictos, path)

I am getting:

dpath.exceptions.PathNotFound: Could not find a/b/f[2]/h to delete it.

So the question basically is how to delete items from nested dicts that are in a list?

It seems the library expects the same separator to be used for all segments ie use a/b/f/2/h

path = "a/b/f/2/h"
dpath.util.delete(dictos, path)
print(dictos)

Result:

{'a': {'b': {'d': 4, 'e': [], 'f': [{'g': 5}, 'test', {'i': 7}]}}}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM