gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:18 24 4
gpt4 key购买 nike

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

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

关于python - 如何将两组列表组合成字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com