非常简单的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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像