“查找链接”;“儿童/父母”;在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}