从两个列表创建dicts列表,而不会丢失其中一个列表的排序顺序

时间:2017-01-19 13:49:28

标签: python-2.7

来自以下两个清单

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}]

3 个答案:

答案 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)]