この配列内の親の兄弟を探したいと思います。混在のdict /リストで親の兄弟を見つける
arr = {
'children': [
{
'id':'item_1',
'title':'Item 1',
'children': [
{
'id':'item_a',
'title':'Item A'
},
{
'id':'item_b',
'title':'Item B'
},
{
'id':'item_c',
'title':'Item C',
'children': [
{
'id':'item_i',
'title':'Item I'
},
{
'id':'item_ii',
'title':'Item II'
}
]
}
]
}
]
}
たとえば、「item_b」をメソッドに挿入すると、「item_1」(親として「子供」は無視されます)を返す必要があります。これと似たようなもの:
>>> parent = get_parent(arr, 'item_i', ['children'])
>>> parent['id']
item_c
>>> parent = get_parent(arr, 'item_1', ['children'])
>>> parent['id']
None
私のIDは一意であるため、親が1つしかないことはわかっています。
私は例を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コードがアルゴリズムと非常によく似ていることがわかりました。ちょうどこれがgooglersを助けるかもしれないと思った:) – NinjaFart