在混合字典/列表中查找父级兄弟

时间:2017-04-23 09:49:56

标签: python linux dictionary nested

我想在这个数组中找到父级兄弟。

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

我的身份是独一无二的,所以我知道只会有一位父母。

我已经通过mgilsonClaudiu查看了示例,但我无法理解如何将这些更改为我之后的内容。 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'))

1 个答案:

答案 0 :(得分:1)

一个选项是遍历您的数组并在遍历到达感兴趣的项目时返回父ID:

{ 5x5x5 subaary no 0,5x5x5 subaary no 1,5x5x5 subaary no 2,5x5x5 subaary no 3,5x5x5 subaary no 4}