将两个列表组合成一个字典列表并且所有值都相同

问题描述 投票:0回答:2

我有两个想要合并的列表:

old = ['aaa', 'bbb', 'ccc']
new = ['AAA', 'BBB', 'CCC']

我想制作一个字典列表,如下所示:

myList = [{'lama': 'aaa', 'baru': 'AAA'}, {'lama': 'bbb', 'baru': 'BBB'}, {'lama': 'ccc', 'baru': 'CCC'}]

我尝试的是:

myList = []
myDict = {}

old = ['aaa', 'bbb', 'ccc']
new = ['AAA', 'BBB', 'CCC']


for idx, value in enumerate(old):
    myDict['lama'] = old[idx]
    myDict['baru'] = new[idx]

    myList.append(myDict)
    
print(myList)

结果是:

[{'lama': 'ccc', 'baru': 'CCC'}, {'lama': 'ccc', 'baru': 'CCC'}, {'lama': 'ccc', 'baru': 'CCC'}]

我应该怎样做才能得到我想要的结果? 谢谢

python for-loop pass-by-reference pass-by-value
2个回答
3
投票

尝试

myList = [{'lama': i, 'baru': j} for i, j in zip(old, new)]

2
投票

您的代码只有一个初始化字典的小问题。重复的更新会就地更改原始字典,因此如果您在循环中初始化它,它应该可以工作。

myList = []

old = ['aaa', 'bbb', 'ccc']
new = ['AAA', 'BBB', 'CCC']


for idx, value in enumerate(old):
    myDict = {}
    myDict['lama'] = old[idx]
    myDict['baru'] = new[idx]
    print(myDict)
    myList.append(myDict)
    
print(myList)

您还可以使用

zip
同时遍历相同长度的列表。

old = ['aaa', 'bbb', 'ccc']
new = ['AAA', 'BBB', 'CCC']

myList = []

for x,y in zip(old, new):
  myList.append({"lama": x, "baru":y})

这是输出:

[{'lama': 'aaa', 'baru': 'AAA'}, {'lama': 'bbb', 'baru': 'BBB'}, {'lama': 'ccc', 'baru': 'CCC'}]
© www.soinside.com 2019 - 2024. All rights reserved.