私の問題文は私が検索クエリを持っていると私は階層を維持するクエリに一致する辞書を返す必要があります。辞書を再帰的に検索辞書を返す完全なhirerachy
私は最初に達成することができます。
{"Name":"google search","items":[],"properties":{"id":1,"process":123}
予想される出力:しかし、私は右のこの出力を得るようなもの
の下、開始から 完全な階層を返したい
{
"items":[
{'Name':'chrome','items':
[
{"Name":"google search","items":[],"properties":{"id":1,"process":123}}
]
},
]
}
これは私のサンプル入力である:
myinput = {
"items":[
{'Name':'firefox','items':[],"properties":{"one":1,"two":2}},
{'Name':'chrome','items':[
{'Name':"stackoverflow","items":[],"properties":{"one":1,"two":2}},
{"Name":"google search","items":[],"properties":{"id":1,"process":123}}
],
"properties":{"one":1,"two":2}},
{'Name':'new','items':[],"properties":{"one":1,"two":2}},
{'Name':'new','items':[],"properties":{"one":1,"two":2}},
]
}
これまで私が何を試したか
matched_items = []
def resursive_fun(Nodes, searchQuery):
for key, value in Nodes.iteritems():
if isinstance(value, list):
for item in value:
matchValue = match_items(searchQuery, item['properties'])
if matchValue:
matched_items.append(item)
resursive_fun(item, searchQuery)
return matched_items
searchDict = {"id": 1, "process": 123}
resursive_fun(myinput, searchDict)
これは正常に動作します。しかし、検索クエリが入力セット内の複数の要素と一致する場合、このアルゴリズムはすべての一致結果を返しません。たとえば、検索辞書が 'searchDict = {" process ":123}'の場合、このプロパティでは、2つのアイテムが同じ値を持ちます。その場合は、それは私の階層を持つ2つの辞書を返す必要があります。 – vr22
複数のマッチを処理する必要がある場合は、論理を短絡しないように変更することができます。その状況で厄介なのは、一致するアイテムのサブアイテムをどのように扱うかを決めることだけです。彼らは常に含まれるべきかどうか? – Blckknght
サブアイテムは必ずしもすべて含まれている必要はありません。あなたはいくつかのマッチのシナリオを処理するために短絡しない方法について少し詳しく説明できますか?私のために非常に役立つだろう。前もって感謝します。 – vr22