我的問題是我有搜索查詢,我必須返回匹配查詢維護層次結構的字典。遞歸搜索字典返回完整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}',則這個屬性中的兩個項目具有相同的值。在這種情況下,它應該返回兩個帶有層次結構的字典。 – vr22
如果您需要處理多個匹配,您可以將邏輯稍微更改爲不會發生短路。在這種情況下唯一棘手的事情是決定如何處理匹配項目的子項目。他們應該總是被包括在內嗎? – Blckknght
子項目不一定全部包括在內。你能否更詳細地解釋如何不進行短路處理幾場比賽的情況?會對我很有幫助。提前致謝。 – vr22