我想在此數組中找到父級兄弟。例如,如果我將「item_b」放入方法中,它必須返回「item_1」(忽略「children」作爲父項)。類似的東西:在混合字典/列表中查找父級兄弟
>>> parent = get_parent(arr, 'item_i', ['children'])
>>> parent['id']
item_c
>>> parent = get_parent(arr, 'item_1', ['children'])
>>> parent['id']
None
我的身份證是獨一無二的,所以我知道只會有一位家長。
我看過mgilson和Claudiu的例子,但我無法弄清楚如何將這些改爲我所追求的。 Claudius解決方案看起來像是正確的方向,但對於我的陣列,它只返回[]
。
編輯: ewcz解決方案的偉大工程。我修改了一點,讓越來越標題,以及:
def get_parent(arr, item_id):
L = [(None, arr)]
while L:
parent_item, item = L.pop()
curr_id = item.get('id', None)
if curr_id == item_id:
return parent_item
children = item.get('children', [])
for child in children:
L.append((item, child))
parent = get_parent(arr, 'item_i')
print(parent.get('id'))
print(parent.get('title'))
你確定標題中的「兄弟」字嗎?從描述中看,您只需要父項。同胞項目將是那些共享父項目的項目,例如您的示例中的「item_i」和「item_ii」。 – gereleth
@gereleth你可能是對的,但我認爲'id'和'title'是'children'的兄弟姐妹。 – NinjaFart
我最近了解了a *算法,現在我發現@ewcz代碼與算法非常相似。只是認爲這可能有助於任何谷歌:) – NinjaFart