Skip to main content
 首页 » 编程设计

Python:什么是扁平化字典列表的最佳方法

2025年05月04日15lhb25

我怎样才能用嵌套字典压平一个字典列表,假设我有以下字典:

data = [ 
            { 'Name':'xyx', 
            'Age':22, 
            'EmpDetails':{'Salary':100,'Job':'Intern','Location':'TER'} 
            }, 
            { 'Name':'abc', 
                'Age':23, 
                'EmpDetails':{'JoinDate':'20110912','Salary':200,'Job':'Intern2','Location':'TER2'} 
            }, 
            {'Name':'efg', 
                'Age':24, 
                'EmpDetails':{'JoinDate':'20110912','enddate':'20120912','Salary':300,'Job':'Intern3','Location':'TER3'} 
            } 
       ] 

我需要删除 EmpDetails 节点并将其值向上移动一级,如下所示

data = [ 
            { 'Name':'xyx','Age':22,'Salary':100,'Job':'Intern','Location':'TER'}, 
            { 'Name':'abc','Age':23,'JoinDate':'20110912','Salary':200,'Job':'Intern2','Location':'TER2'}, 
            {'Name':'efg','Age':24,'JoinDate':'20110912','enddate':'20120912','Salary':300,'Job':'Intern3','Location':'TER3'} 
       ] 

我现在在下面使用这个,有没有更快的方法?

newlist = [] 
for d in data: 
    empdict ={} 
    for key, val in d.items(): 
        if(key!='EmpDetails'): 
            empdict[key] = val 
        if(key=='EmpDetails'): 
            for key2, val2 in val.items(): 
                empdict[key2] = val2 
    newlist.append(empdict) 

请您参考如下方法:

这是一种使用 dict.update 和 .pop 的方法

例如:

data = [ 
            { 'Name':'xyx', 
            'Age':22, 
            'EmpDetails':{'Salary':100,'Job':'Intern','Location':'TER'} 
            }, 
            { 'Name':'abc', 
                'Age':23, 
                'EmpDetails':{'JoinDate':'20110912','Salary':200,'Job':'Intern2','Location':'TER2'} 
            }, 
            {'Name':'efg', 
                'Age':24, 
                'EmpDetails':{'JoinDate':'20110912','enddate':'20120912','Salary':300,'Job':'Intern3','Location':'TER3'} 
            } 
       ] 
 
for i in data: 
    i.update(i.pop("EmpDetails")) 
print(data) 

输出:

[{'Age': 22, 'Job': 'Intern', 'Location': 'TER', 'Name': 'xyx', 'Salary': 100}, 
 {'Age': 23, 
  'Job': 'Intern2', 
  'JoinDate': '20110912', 
  'Location': 'TER2', 
  'Name': 'abc', 
  'Salary': 200}, 
 {'Age': 24, 
  'Job': 'Intern3', 
  'JoinDate': '20110912', 
  'Location': 'TER3', 
  'Name': 'efg', 
  'Salary': 300, 
  'enddate': '20120912'}]