python的元组列表,以供csv.dictwriter使用的dicts列表

时间:2017-01-17 05:14:53

标签: python dictionary

我有这个场景

x=['a','b','c']   #Header
y=[(1,2,3),(4,5,6)]   #data

我需要创建以下结构

[{'a':1, 'b':2, 'c':3}, {'a':4, 'b':5, 'c':6}]

任何更好的方法(像python专家)

rows=[]
for row in range(0,len(y)):
    rec={}
    for col in range(0, len(x)):
        rec[x[col]]=y[row][col]
    rows.append(rec)    
print(rows)

上面的代码将给出所需的结果,但我正在寻找一个单线程解决方案,如下面的

rows=list( ( {x[col]:y[row][col]} for row in range(0,len(y)) for col in range(0, len(x)) ) )

输出:

[{'a': 1}, {'b': 2}, {'c': 3}, {'a': 4}, {'b': 5}, {'c': 6}]

但这会将列表作为单独的dict而不是合并的dict。任何想法???

1 个答案:

答案 0 :(得分:3)

您可以编写一个迭代数据的生成器。然后,对于数据中的每个项目,使用zip生成可传递给dict(header, value)元组的迭代:

>>> x = ['a','b','c']
>>> y = [(1,2,3),(4,5,6)]
>>> gen = (dict(zip(x, z)) for z in y)
>>> list(gen)
[{'a': 1, 'c': 3, 'b': 2}, {'a': 4, 'c': 6, 'b': 5}]

更新上面的示例使用生成器表达式而不是list,因为编写CSV的代码一次只需要一行。生成完整列表需要更多内存而没有任何好处。