递归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 altbeacon   java在OpenXava免费版本中可以创建多个用户吗?   java如何决定定义变量“private”?   java为什么GetMethodID()对不存在的方法不返回NULL?   java Get JComboBox项字符串表示法   java如何在ifs之间设置限制?   java Android错误:IllegalStateException   JavaSpring4MVC语言环境已更改,但JSP对此没有响应   java Netbeans:如何构建。jar文件随附外部文件。jar库?   Spring Petclinic项目Maven编译时出现java错误   声明Java数组增量元素的快速方法   java无法使用相对xpath找到元素   javascript无法更改标题,也无法在操作栏上显示图标   java标签不是一个接一个地动态创建的   java如何使用ThymeLeaf将对象的属性绑定到隐藏字段?   java从EJB无状态会话bean调用CDI会话范围的生产者方法   java为什么num+=array[i]与for循环中的num=num+array[i]的工作方式不同   使用jsonsimple实现jQuery UI自动完成的java JSON格式   JavaFaceletsUI:重复标记中断JSF表单验证