栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查找嵌套字典和列表中所有出现的键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找嵌套字典和列表中所有出现的键

我发现此Q /
A非常有趣,因为它为同一问题提供了几种不同的解决方案。我采用了所有这些功能,并使用一个复杂的字典对象对其进行了测试。我必须从测试中删除两个函数,因为它们必须有很多失败结果,并且它们不支持将返回列表或dict作为值,我认为这是必不可少的,因为应该为即将出现的
所有 数据准备一个函数。

因此,我通过该

timeit
模块以100.000迭代的速度注入了其他功能,输出结果如下:

0.11 usec/pass on gen_dict_extract(k,o)- - - - - - - - - - - - - - - - - - - - - - - - - - - - -6.03 usec/pass on find_all_items(k,o)- - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.15 usec/pass on findkeys(k,o)- - - - - - - - - - - - - - - - - - - - - - - - - - - - -1.79 usec/pass on get_recursively(k,o)- - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.14 usec/pass on find(k,o)- - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.36 usec/pass on dict_extract(k,o)- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

所有函数都使用相同的指针进行搜索(“记录”)和相同的字典对象,其结构如下:

o = { 'temparature': '50',       'logging': {        'handlers': {          'console': { 'formatter': 'simple',  'class': 'logging.StreamHandler',  'stream': 'ext://sys.stdout',  'level': 'DEBUG'          }        },        'loggers': {          'simpleExample': { 'handlers': ['console'],  'propagate': 'no',  'level': 'INFO'          },         'root': {'handlers': ['console'], 'level': 'DEBUG'         }       },        'version': '1',        'formatters': {         'simple': {'datefmt': "'%Y-%m-%d %H:%M:%S'", 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s'         }       }     },      'treatment': {'second': 5, 'last': 4, 'first': 4},        'treatment_plan': [[4, 5, 4], [4, 5, 4], [5, 5, 5]]}

所有功能均提供相同的结果,但时间差异却很大!该函数

gen_dict_extract(k,o)
是我从此处的函数改编而成的函数,实际上,它
find
与Alfe的函数非常相似,主要区别在于,如果递归期间传递了字符串,则我要检查给定对象是否具有iteritems函数:

def gen_dict_extract(key, var):    if hasattr(var,'iteritems'):        for k, v in var.iteritems(): if k == key:     yield v if isinstance(v, dict):     for result in gen_dict_extract(key, v):         yield result elif isinstance(v, list):     for d in v:         for result in gen_dict_extract(key, d):  yield result

因此,此变体是此处功能中最快,最安全的。并且

find_all_items
速度非常慢,并且与第二慢的速度相差甚远,
get_recursivley
而其余的速度除外
dict_extract
(彼此接近)。功能
fun
keyHole
唯一的工作,如果你正在寻找的字符串。

这里有趣的学习方面:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号