この問題は、同じ問題に対していくつかの異なる解決方法を提供するので、このQ/Aは非常に興味深いものです。私はこれらすべての機能を使い、複雑な辞書オブジェクトでそれらをテストしました。テストでは2つの機能を取らなければなりませんでした。なぜなら、結果は多くの場合失敗し、リストやディクテーションを値として返すことをサポートしていなかったからです。
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)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
すべての機能は、(「ログ」)と同じ辞書オブジェクトを検索するために、同じ針を持っていた:
は、だから私は
timeit
モジュールを介して100.000反復で他の機能を汲み上げ、出力は次のような結果になりました、このように構成されている:すべての機能は同じ結果を届けますが、時間差は劇的である
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)
は、実際には、指定されたオブジェクトがiteritems機能を持っている場合、私は再帰の間に渡された場合の文字列には、チェックしていますことを、主な違いと、アルフェからfind
機能のようなかなり多くあり、ここでは関数から適応私の関数である。
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
は非常に遅く、2番目に遅いのは遠いです。get_recursivley
dict_extract
を除き、残りはお互いに近いです。 fun
とkeyHole
は、文字列を探している場合にのみ機能します。
ここで面白い学習の側面:)
これは 'JSON'と関連がありますか? – hochl
@hochlこれは、mongodbデータベースからのもので、BSONからPythonの 'dict'と' pymongoの 'lists'に解析されています。 –
**関連項目:** https://stackoverflow.com/questions/7681301/search-for-a-key-in-a-nested-python-dictionary https://stackoverflow.com/a/16508328/42223 – dreftymac