非常简单的deep_set和deep_get函数,使用“点字符串”作为键访问嵌套的dict(或任何对象)。
dict-deep的Python项目详细描述
说明
从嵌套的dict结构或实际上任何对象的深层结构设置或获取值的简单函数,因为 从第二版开始,我们不再假设我们在处理dict。
尽管使用dicts会让您的生活更轻松(请参阅为此目的留下的默认参数)。 我们现在允许您使用自定义getter、setter、deleter可调用函数,以便您可以遍历任何类型的嵌套结构 反对。
此模块不实现点符号作为dict的替代访问方法。 我通常不喜欢更改python命令来启用点表示法,因此没有可用的 包装适合我的需要,一个简单的深入访问。
功能
deep_get接受:
- D:必须的。任何物体,通常是字典。
- 键:必需。list()构造函数接受的字符串或任何内容。
- default:可选,可调用:可作为dict.setdefault函数的默认值使用的调用。如果d不是dict,则使用自定义getter。
- getter:可选,可调用。如果设置了getter,则忽略默认值。必须是接受对象和键作为参数的可调用项。(例如lambda o,k:o[k])
- sep:可选,string:默认情况下它是一个点“.”,您可以使用string函数split将接受的任何内容
返回与“d”上的“key”对应的值
deep_set接受:
- D:同上
- 键:同上
- 值:必需,不言自明
- 默认:可选,可调用:如果设置,将使用set default遍历嵌套的dict结构。请参阅Deep_Get的评论。
- 盖特:同上。
- setter:可选,可调用。一个可调用的,包含3个参数:o,k,v-其中o=任何对象,k=键,v=值
- 九月:同上
无返回值
deep'接受:
- D:同上
- 键:同上
- 九月:同上
- 盖特:同上。但是,如果要避免引发异常,请使getter返回none。
- deleter:optional callable:一个接受两个参数的可调用函数:o,k(对象和键)。默认情况下,我们称之为“del o[k]
返回元组: (true,<;已删除项的值>;)或 (假,无)
用法
from dict_deep import deep_get, deep_set, deep_del
i = 1
# Alternative 1
d = {'a': {'b': {}}}
deep_set(d, "a.b.c", "Hello World")
print("{}: {}".format(i, deep_get(d, "a.b.c")))
i += 1
# Alternative 2
d = {}
deep_set(d, ['a', 'b', 'c'], "Hello World", default=lambda: dict())
print("{}: {}".format(i, deep_get(d, "a.b.c")))
i += 1
# Alternative 3
d = {}
deep_set(d, "a->b->c", "Hello World", default=lambda: dict(), sep="->")
print("{}: {}".format(i, deep_get(d, "a->b->c", sep="->")))
i += 1
# Alternative 4
d = {}
deep_set(d, "a->b->c", "Hello World", getter=lambda o, k: o.setdefault(k, dict()), sep="->")
print("{}: {}".format(i, deep_get(d, "a->b->c", sep="->")))
i += 1
# Alternative 5
d = {}
keys = 'a.b.c'
keys = keys.split()
_ = deep_get(d=d, key=keys[0:-1], default=lambda: dict(), sep=".")
_[keys[-1]] = "Hello World"
print("{}: {}".format(i, deep_get(d, keys)))
i += 1
# deep_del
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]))
print(d)