我有一个问题,希望你能帮助我。我有以下字典:
{
'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]。
那么有人可以教我如何使这有效和顺利吗? :)
答案 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}