Python中遍历字典列表、提取值并填充至目标字典的方法
问题描述
现有如下字典列表:
[ {'name':['mallesh'],'email':['m@gmail.com']}, {'name':['bhavik'],'ssn':['1000011']}, {'name':['jagarini'],'email':['m@gmail.com'],'phone':['111111']}, {'name':['mallesh'],'email':['m@gmail.com'],'phone':['1234556'],'ssn':['10000012']} ]
需要基于指定键提取信息,填充到目标字典:
xml_master_dict={'name':[],'email':[],'phone':[],'ssn':[]}
提取规则:
- 若单个字典中存在目标键,就把该键对应列表里的元素(取第一个,因原始数据中每个键对应值均为单元素列表)加入目标字典的对应列表
- 若不存在目标键,则向对应列表中添加
None
预期填充后的字典:
{ 'name':['mallesh','bhavik','jagarini','mallesh'], 'email':['m@gmail.com',None,'m@gmail.com','m@gmail.com'], 'phone':[None,None,'111111','1234556'], 'ssn':[None,'1000011',None,'10000012'], }
同时需要支持将填充后的字典转换为pandas DataFrame形式:
import pandas as pd pd.DataFrame({ 'name':['mallesh','bhavik','jagarini','mallesh'], 'email':['m@gmail.com',None,'m@gmail.com','m@gmail.com'], 'phone':[None,None,'111111','1234556'], 'ssn':[None,'1000011',None,'10000012'], })
实现代码
1. 填充目标字典
# 原始数据 data_list = [ {'name':['mallesh'],'email':['m@gmail.com']}, {'name':['bhavik'],'ssn':['1000011']}, {'name':['jagarini'],'email':['m@gmail.com'],'phone':['111111']}, {'name':['mallesh'],'email':['m@gmail.com'],'phone':['1234556'],'ssn':['10000012']} ] # 目标字典 xml_master_dict = {'name':[],'email':[],'phone':[],'ssn':[]} # 遍历每个字典提取对应值 for item in data_list: for key in xml_master_dict.keys(): xml_master_dict[key].append(item[key][0] if key in item else None) print(xml_master_dict)
运行后输出的字典与预期完全一致。
2. 转换为pandas DataFrame
直接将填充完成的字典传入pd.DataFrame即可:
import pandas as pd df = pd.DataFrame(xml_master_dict) print(df)
输出的DataFrame内容如下:
name email phone ssn 0 mallesh m@gmail.com None None 1 bhavik None None 1000011 2 jagarini m@gmail.com 111111 None 3 mallesh m@gmail.com 1234556 10000012
内容的提问来源于stack exchange,提问作者myamulla_ciencia
相关产品推荐
相关产品推荐

