拼合嵌套字典

时间:2020-06-08 05:48:27

标签: python

输入:

my_list = [
{'Name':'Jack', 'Surname': 'Reacher', 'Blogs':{'BlogName': 'python2', 'Date':'20200101' }},
{'Name':'Jack2', 'Surname': 'Reacher2', 'Blogs':{'BlogName':'Python3','Date':'20200201'}}
]

预期输出:

arr_1 = [ {'Name':'Jack', 'Surname':'Reacher'}, {'Name':'Jack2', 'Surname':'Reacher2'} ]

arr_2 = [ {'ParentId':'Jack', 'BlogName':'python2','Date1':'20200101'},
          {'ParentId':'Jack2','BlogName':'Python3','Date1':'20200201'} ]

我得到的输出:

arr_1 = [ {'Name': 'Jack'}, {'Surname': 'Reacher'}, {'Name': 'Jack2'}, {'Surname': 'Reacher2'} ]

arr_2 = [{'ParentId': 'Jack'}, {'BlogName': 'python2', 'Date': '20200101'}, 
         {'ParentId': 'Jack2'}, {'BlogName': 'Python3', 'Date': '20200201'}]

我应该如何将'arr_2'的字典拼合?

for lis in my_list:
    for k, v in lis.items():
        if not k == 'Blogs':
            arr_1.append({k:v})

for lis in my_list:
    for k, v in lis.items():
        if k == 'Surname':
            continue
        elif k == 'Name':
            arr_2.append({'ParentId':v})
        else:
            arr_2.append(v)

print(arr_1)
print(arr_2)

此外,有没有一种Python方式可以做到这一点?我觉得我已经结束了。

1 个答案:

答案 0 :(得分:5)

请注意在arr2之前如何处理arr1。使用'Blogs'处理dict时,我们会移除arr2内部pop。此外,**运算符还可以使字典变平。

arr2 = [{'ParentId':d.get('Name'),**d.pop('Blogs')} for d in my_list]
arr1 = my_list[:]

#Output
[{'Name': 'Jack', 'Surname': 'Reacher'}, {'Name': 'Jack2', 'Surname': 'Reacher2'}]
[{'ParentId': 'Jack', 'BlogName': 'python2', 'Date': '20200101'}, {'ParentId': 'Jack2', 'BlogName': 'Python3', 'Date': '20200201'}]