在pythons词典中查找链接的“child / parents”

时间:2014-01-08 17:45:31

标签: python dictionary

我有一个问题,希望你能帮助我。我有以下字典:

    {
    '100': {'name': Glenn,'age': 25,'cars': 2},
    '101': {'name': Glenn,'age': 25,'cars': 2,'children': ['105', '102']},
    '102': {'name': Glenn,'age': 25,'cars': 2,'children': ['103']},
    '103': {'name': Glenn,'age': 25,'cars': 2},
    '104': {'name': Glenn,'age': 25,'cars': 2,'children': ['105', '102']},
    '105': {'name': Glenn,'age': 25,'cars': 2,'children': ['124']},
    '106': {'name': Glenn,'age': 25,'cars': 2},
    '107': {'name': Glenn,'age': 25,'cars': 2,'children': ['199']},
    }

任务是:对于此列表中的每个条目,确定他们是否在此列表中有父级,如果是,请在他们的dict中使用parent: ['101','104']等进行输入。

如您所见,有些人在此列表中没有父母,因此不应该让这个"父母"条目补充说。其他人的孩子不在名单上,这些孩子被忽略了,因为我们没有关于他们的信息。

我尝试了以下内容:

     def addParentInfo(patients):
        for pkey, pvalue in patients.items():
            for pkey2,pvalue2 in patients.items():
                if pkey in pvalue["children"]:
                    pvalue[parent] = [pkey2]

但它看起来如此无组织,而且我不知道如何照顾名单之外的孩子"问题,当一个人在列表中有两个父母时,我应该将它们添加到列表中,而不是重置pvalue [parent]。

那么有人可以教我如何使这有效和顺利吗? :)

3 个答案:

答案 0 :(得分:1)

def addParentInfo(patients):
    for k, v in patients.items():
        for ck in v.get('children', []):
            if ck in patients:
                patients[ck].setdefault('parent', []).append(k)

答案 1 :(得分:1)

这样的事情:

import pprint            

for k, v in data.items(): #data is the main dictionary
    if 'children' in v:
        for child in v['children']:
            if child in data:
                data[child].setdefault('parent', []).append(k)

pprint.pprint(data)     

<强>输出:

{'100': {'age': 25, 'cars': 2, 'name': 'Glenn'},
 '101': {'age': 25, 'cars': 2, 'children': ['105', '102'], 'name': 'Glenn'},
 '102': {'age': 25,
         'cars': 2,
         'children': ['103'],
         'name': 'Glenn',
         'parent': ['101', '104']},
 '103': {'age': 25, 'cars': 2, 'name': 'Glenn', 'parent': ['102']},
 '104': {'age': 25, 'cars': 2, 'children': ['105', '102'], 'name': 'Glenn'},
 '105': {'age': 25,
         'cars': 2,
         'children': ['124'],
         'name': 'Glenn',
         'parent': ['101', '104']},
 '106': {'age': 25, 'cars': 2, 'name': 'Glenn'},
 '107': {'age': 25, 'cars': 2, 'children': ['199'], 'name': 'Glenn'}}

答案 2 :(得分:0)

假设d是你原来的字典,这个字典理解应该可以解决问题:

d = {k: {k: v for k, v in v.items() if v}
    for k, v in d.items() if v.__setitem__('parents',
    [p for p, v in d.items() if 'children' in v and k in v['children']]) or True}