来自以下两个清单
wcD = ['countD', 'countD', 'countD', 'countD', 'countD']
D2 = [0, 2, 1, 0, 0]
我需要创建一个dicts列表而不会丢失列表D2的顺序
约束是我想修改它以便与AWS Lambda一起使用而无需上传其他包。
这是我写的代码:
count = 0
z8 = []
while (count < len(wcD)):
x1 = []
x2 = []
x1.append(D2.pop(0))
x2.append(wcD.pop(0))
for x in x1:
zipped = zip(x2,x1)
dd = dict(zipped)
z8.append(dd)
count = count + 1
print z8
以下是该代码的输出
[{'countD': 0}, {'countD': 2}, {'countD': 1}]
我正在寻找一种更简单的方法,而且这不会产生5个dicts,相反它只会在列表中产生3个dicts。
所需的输出如下
[{'countD': 0}, {'countD': 2}, {'countD': 1}, {'countD': 0}, {'countD': 0}]
答案 0 :(得分:1)
map(lambda item: {item[0]: item[1]}, zip(wcD, D2))
产生
[{'countD': 0}, {'countD': 2}, {'countD': 1}, {'countD': 0}, {'countD': 0}]
答案 1 :(得分:1)
我认为问题是while (count < len(wcD)):
由于wcD.pop()
执行,wcD的长度会减少。
在
之前将长度附加到变量wcD = ['countD', 'countD', 'countD', 'countD', 'countD']
D2 = [0, 2, 1, 0, 0]
count = 0
wcDLen = len(wcD)
z8 = []
while (count < wcDLen):
x1 = []
x2 = []
x1.append(D2.pop(0))
x2.append(wcD.pop(0))
for x in x1:
zipped = zip(x2,x1)
dd = dict(zipped)
z8.append(dd)
count = count + 1
print z8
答案 2 :(得分:1)
使用列表和字典理解的组合
[{k: v} for k, v in zip(wcD, D2)]