展平嵌套字典

Gok*_*oku 1 python

输入:

my_list = [
{'Name':'Jack', 'Surname': 'Reacher', 'Blogs':{'BlogName': 'python2', 'Date':'20200101' }},
{'Name':'Jack2', 'Surname': 'Reacher2', 'Blogs':{'BlogName':'Python3','Date':'20200201'}}
]
Run Code Online (Sandbox Code Playgroud)

预期输出:

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

arr_2 = [ {'ParentId':'Jack', 'BlogName':'python2','Date1':'20200101'},
          {'ParentId':'Jack2','BlogName':'Python3','Date1':'20200201'} ]
Run Code Online (Sandbox Code Playgroud)

我得到的输出:

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

arr_2 = [{'ParentId': 'Jack'}, {'BlogName': 'python2', 'Date': '20200101'}, 
         {'ParentId': 'Jack2'}, {'BlogName': 'Python3', 'Date': '20200201'}]
Run Code Online (Sandbox Code Playgroud)

我应该如何展平 '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)
Run Code Online (Sandbox Code Playgroud)

另外,有没有一种pythonic的方法来做到这一点?我觉得,我做完了。

Abh*_*raj 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'}]
Run Code Online (Sandbox Code Playgroud)