dict类的包装器,它扩展了嵌套dict的功能,包括使用键路径导航和嵌套键搜索。这包括混合的dicts和list。
nesteddictionar的Python项目详细描述
嵌套词典
版本:1.2.1
python dicts的包装器,允许您使用key paths在嵌套dict中搜索和导航。也适用于混合字典(嵌套列表和dicts的混合)。源于在嵌套字典中搜索关键字的需要;在为嵌套字典构建另一个完整类上花费了太多时间,但它适合我们的需要。在
示例:
>>>fromnesteddictionaryimportNestedDict#import the NestedDict class>>>d={'path':{'to':{'key':'val'}}}#normal way of doing nested dictionary>>>nested_dict=NestedDict(d)#created a nested dictionary from a normal dictionary
功能:
- 在订阅中使用键路径导航嵌套字典(例如:
nested_dict[ ['path','to','key'] ]
,它与nested_dict['path']['to']['key']
相同) - 在不违反任何现有dict操作的情况下添加功能(据我所知);keypath是以列表的形式存在的,无论如何不能将其用作普通dict的键。所有其他的dict规则仍然适用。在
- findall方法:查找嵌套字典中的所有嵌套键。在
- get和set方法:使用带分隔符的keypath字符串进行导航(例如:
nested_dict.get('path.to.key')
) - insert方法:创建一个指向嵌套键的完整路径并设置一个值,即使指向目标键的父键不存在(例如,
nested_dict.insert( ['newpath','to','key'], 'newval'
)也会添加到现有的字典中,结果是:NestedDict({ 'path':{'to':{'key':'val'}}, 'newpath':{'to':{'key':'newval'}} })
)。在
限制:
- 虽然速度很快,但它会增加一些开销,因此永远无法像常规方式访问dicts那样快。在
变更(PEP 440:主要.次要.修补)公司名称:
- v0.1:开发了在嵌套字典中搜索关键字的方法。在
- v1.0:nesteddictionary类的初始工作版本。在
- v1.2:将字典遍历从递归改为函数工具.reduce;这不是python,而是更快(但是,仍然没有直接访问dicts和list那么快)。为了进行比较,在执行以下操作时(这些测试不包括在测试中,但很容易自己编写和测试):
^{pr2}$
产量:
>>>648ns±3.17nsperloop(mean±std.dev.of7runs,1000000loopseach)#reduce>>>1.77µs±4.05nsperloop(mean±std.dev.of7runs,1000000loopseach)#recursion>>>89.3ns±0.448nsperloop(mean±std.dev.of7runs,10000000loopseach)#direct
在
参考文献:
- Scalpl:与嵌套字典类似的实现。一些好的方法。在
- Functools Reduce for dicts:加速字典访问,但不是python。在
- 其他的我肯定忘了提。非常感谢。在
- 项目
标签: