递归dict的易出核计算

fdict的Python项目详细描述


与dict的差异

尽管最大程度的兼容性是主要目标,但不同的实现当然会带来不可避免的差异。

主要区别在于调用 items() keys() values() view* 方法将返回所有在任何级别嵌套的子级,而dict只返回直接子级。此外,默认情况下,这些方法只返回leaves(非dict对象)而不返回nodes,尽管您可以通过支持 nodes=true 参数来覆盖它。

另一个区别是冲突:一个项既可以是一个叶,也可以是一个节点,因为如果不遍历所有项(即使用 viewitems() ,则无法检查是否没有节点,而这种方法是 fdict 数据结构的限制)。

这也意味着,当分配已经分配的项时,节点将不会被替换,但是单例将被正确替换。更明确地说:

这有效:

d=fdict({'a':1,'b':{'c':2}})d['a']=-1print(d)d['a']={'d':3,'e':4}print(d)

{'a': -1, 'b/c':2} {'a/d':3,'a/e':4,'b/c':2}

但这并不像预期的那样工作:

d=fdict({'a':1,'b':{'c':2}})d['b']=-1print(d)

{'a':1,'b': -1, 'b/c':2}

一个小的区别是对键的处理:为键分配一个空dict不会创建键(例如, d['a'] ={} 不会创建键 a ,它将保持不存在,直到它被分配一个非空dict值),并且分配不存在的子键exist没有任何先前的父dict创建(例如, d= fdict(); d['a']['b']['c']['d'['e'] =1 可以)。

类似地,遍历 keys() values() items() 将遍历任何嵌套级别的所有嵌套叶。为了便于探索,如果您希望类似于 dict 的行为仅探索仅显示直接子项的直接子项,则可以使用 viewkeys_restrict() viewitems_restrict() viewvalues_restrict() firstkey() firstitem() firstvalue() 。不过,请注意,步行速度不会比步行所有项目快(因为在内部,这是正在进行的),因此您无法使用这些方法优化速度,这只是为了方便。

另一个小的区别是如何处理 pop() popitem() :它们将在任何嵌套级别返回下一个叶,而从不返回节点。因此,您无法在特定级别获取下一项,而只能在任何嵌套级别获取下一项。

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

推荐PyPI第三方库


热门话题
java HikariCP连接池Tomcat调试启用   java如何在javascript中访问JSON数组的元素?   jasper使用HttpServlet报告Java空白PDF   用于存储海量数据的java最佳集合   JBPM&springboot组织。流口水。坚持不懈jta。JtaTransactionManager在JNDI位置[java:comp/UserTransaction]未找到任何UserTransaction   java Grails maven插件需要Groovy 2.4.2   获取列表中访问最少的元素(Java 8)   java在IntelliJ中下载cn1lib不起作用   java Akka构造函数通过spring进行布线   swing在Java中创建JList时,如何更改条目的背景颜色?   为什么Java8Lambda允许访问非最终类变量?   javajavax。邮政MessaginException:无法连接到SMTP主机   java Android Webview高度在滚动后增加