Very simple deep_set and deep_get functions to access nested dicts using 'dotted strings' as key.
Project description
Description
Simple functions to set or get values from a nested dict structure
This module DOES NOT implement dotted notation as an alternative access method for dicts. I generally do not like changing python dicts to enable dot notation, hence no available package fitted my needs for a simple deep accessor.
Arguments
deep_get accepts:
- d: the dictionary
- key: a string OR anything accepted by the list() constructor
- access_method: one of METHOD_ATTR (assumed if default is None), METHOD_GET, METHOD_SETDEFAULT (assumed if default is not None). This determines the method to be used to access the nested dict structure.
- default: a callable to be used as default for the dict .get or .setdefault functions
- sep: by default it is a dot '.', you can use anything the string function split will accept
deep_set accepts:
- d: same as above
- key: same as above
- value
- default: if set (not None which is the default), will use setdefault to traverse the nested dict structure
- sep: same as above
deep_del accepts:
- d: same as above
- key: same as above
- sep: same as above
It returns a tuple: (True, ) or (False, None)
How to use
from dict_deep import deep_get, deep_set, deep_del
i = 0
# Alternative 1
i += 1
d = {'a': {'b': {}}}
deep_set(d, "a.b.c", "Hello World")
print("{}: {}".format(i, deep_get(d, "a.b.c")))
# Alternative 2
i += 1
d = {}
deep_set(d, ['a', 'b', 'c'], "Hello World", default=lambda: dict())
print("{}: {}".format(i, deep_get(d, "a.b.c")))
# Alternative 3
i += 1
d = {}
deep_set(d, "a->b->c", "Hello World", default=lambda: dict(), sep="->")
print("{}: {}".format(i, deep_get(d, "a->b->c", sep="->")))
# Alternative 4
i += 1
d = {}
_ = deep_get(d=d, key=['a', 'b'], default=lambda: dict(), sep=".")
_['c'] = "Hello World"
print("{}: {}".format(i, deep_get(d, "a.b.c")))
# deep_del
i += 1
d = {}
deep_set(d, "1.1.1", 'a', default=lambda: dict())
deep_set(d, "1.1.2", 'Hello World')
deep_set(d, "1.1.3", 'c')
print("{}: {}".format(i, deep_del(d, "1.1.2")[1]))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dict-deep-1.2.2.tar.gz
(2.8 kB
view hashes)
Built Distribution
Close
Hashes for dict_deep-1.2.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c9e079294641338385a24719aeef2e7002cdee5d9e08c414454937a10225be9 |
|
MD5 | 17bb36fa81a7e97403ca0af11ca5a0b3 |
|
BLAKE2b-256 | fa46a5aee30662d7ff5832a507e28e6604932071c07ddaf4f1ccda39f41ffddb |