Skip to main content
 首页 » 编程设计

python之如何将两组列表组合成字典

2025年05月04日10zhujiabin

我有两组具有相似数据的列表,我需要将它们组合成一个字典。该列表必须包含两组信息,在另一组有“-”的地方填写。到目前为止,这就是我所拥有的..

aList = [['Last Name', 'First Name', '2000', '2012'],  
       ['Roberts', 'Gloria', '-', '123000'],  
       ['Arreguin', 'Jeffrey', '81000', '-'],  
       ['Myers', 'George', '-', '86000'],  
       ['Willis', 'Mabel', '112000', '-'],  
       ['Oneal', 'Kevin', '96000', '77000'],  
       ['Paz', 'Barbara', '-', '77000'],  
       ['Franklin', 'Claude', '94000', '-'],  
       ['Bradley', 'Shannon', '89000', '-'],  
       ['Fix', 'Anna', '76000', '126000'],  
       ['Meyer', 'Loretta', '-', '116000'],  
       ['Daniels', 'Christina', '85000', '-'],  
       ['Graham', 'Veronica', '-', '136000']] 
 
newList = [['Last Name', 'First Name', '2000', '2012'],  
       ['Meyer', 'Loretta', '123000', '-'],  
       ['Arreguin', 'Jeffrey', '81000', '-'],  
       ['Mielke', 'George', '137000', '-'],  
       ['Thomas', 'Lewis', '132000', '-'],  
       ['Harper', 'Crystal', '80000', '-'],  
       ['Young', 'Gary', '-', '94000'],  
       ['Franklin', 'Claude', '94000', '-'],  
       ['Hedrick', 'James', '-', '105000'],  
       ['Bradley', 'Shannon', '89000', '-'],  
       ['Thigpen', 'Michael', '79000', '-'],  
       ['Willis', 'Mabel', '112000', '-'],  
       ['Hullinger', 'Molly', '70000', '-'],  
       ['Myers', 'George', '-', '86000'],  
       ['Paz', 'Barbara', '-', '77000'],  
       ['Edwards', 'Kathryn', '117000', '97000'],  
       ['Roberts', 'Gloria', '-', '123000'],  
       ['Daniels', 'Christina', '-', '137000'],  
       ['Graham', 'Veronica', '-', '136000']] 
 
def mergeData(newList,aList): 
    aDict={} 
    for item in range(1,len(newList)): 
        key=(newList[item][0],newList[item][1]) 
        value=(newList[item][2],newList[item][3]) 
        aDict[key]=value 
 
    for item in range(1,len(aList)): 
        #stuck here not sure if im going right way with this  
 
 
print(aDict) 

这是一个例子

newList= ['Meyer', 'Loretta', '123000', '-'] 
aList=['Meyer', 'Loretta', '-', '116000'] 

所以合并后的字典应该是

{(‘Meyer’, ‘Loretta’): (‘123000’,’116000’)} 

对于这个条目。

请您参考如下方法:

只需遍历第一个列表来构建具有字典理解的字典:

aDict = {(e[0], e[1]): (e[2], e[3]) for e in aList[1:]} 

Next 遍历另一个,使用辅助函数根据 - 值选择一个或另一个:

def pick(vals): 
    return vals[1] if vals[0] == '-' else vals[0] 
 
for e in newList: 
    key = (e[0], e[1]) 
    existing = aDict.get(key, ('-', '-')) 
    value = (e[2], e[3]) 
    aDict[key] = tuple(map(pick, zip(existing, value))) 

对于您的第一个输入结果:

{('Arreguin', 'Jeffrey'): ('81000', '-'), 
 ('Bradley', 'Shannon'): ('89000', '-'), 
 ('Daniels', 'Christina'): ('85000', '137000'), 
 ('Edwards', 'Kathryn'): ('117000', '97000'), 
 ('Fix', 'Anna'): ('76000', '126000'), 
 ('Franklin', 'Claude'): ('94000', '-'), 
 ('Graham', 'Veronica'): ('-', '136000'), 
 ('Harper', 'Crystal'): ('80000', '-'), 
 ('Hedrick', 'James'): ('-', '105000'), 
 ('Hullinger', 'Molly'): ('70000', '-'), 
 ('Last Name', 'First Name'): ('2000', '2012'), 
 ('Meyer', 'Loretta'): ('123000', '116000'), 
 ('Mielke', 'George'): ('137000', '-'), 
 ('Myers', 'George'): ('-', '86000'), 
 ('Oneal', 'Kevin'): ('96000', '77000'), 
 ('Paz', 'Barbara'): ('-', '77000'), 
 ('Roberts', 'Gloria'): ('-', '123000'), 
 ('Thigpen', 'Michael'): ('79000', '-'), 
 ('Thomas', 'Lewis'): ('132000', '-'), 
 ('Willis', 'Mabel'): ('112000', '-'), 
 ('Young', 'Gary'): ('-', '94000')} 

在你的合并函数中再次组合:

def pick(vals): 
    return vals[1] if vals[0] == '-' else vals[0] 
 
def mergeData(newList, aList): 
    aDict = {(e[0], e[1]): (e[2], e[3]) for e in aList[1:]} 
 
    for e in newList: 
        key = (e[0], e[1]) 
        existing = aDict.get(key, ('-', '-')) 
        value = (e[2], e[3]) 
        aDict[key] = tuple(map(pick, zip(existing, value))) 
 
    return aDict