输入:
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的方法来做到这一点?我觉得,我做完了。
注意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)