Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“查找链接”;“儿童/父母”;在pythons字典中_Python_Dictionary - Fatal编程技术网

“查找链接”;“儿童/父母”;在pythons字典中

“查找链接”;“儿童/父母”;在pythons字典中,python,dictionary,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

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

    {
    '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中用
父项:['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]

那么,有人能教我如何让这一切变得有效和顺利吗?:)

类似这样:

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'}}

假设
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}

是否可以这样做,使父信息在列表中而不是在集合中?:)@尼克:是的,只需使用:
setdefault('parent',[])。附加(k)
谢谢,这正是我想要的解决方案。感谢您的时间和帮助:)
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}