我有一些'列表'包含很少的词典 - 比如3个词典。 3个字典如下:
lstone = [{'dc_test': 1}, {'ac_test':2}, {'con_test':3}]
lsttwo = [{'dc_test': 4}, {'ac_test':5}, {'con_test':6}]
如何创建新列表如下:
newlistone = ['dc_test',1,4]
newlisttwo = ['ac_test',2,5]
newlistthree = ['con_test',3,6]
我的目标是编写一个新的csv文件,以便显示如下:
dc_test,1,4
ac_test,2,5
con_test,3,5
答案 0 :(得分:7)
首先将您的列表转换为词典
d = [dict(itertools.chain(*(d.iteritems() for d in a)))
for a in [lstone, lsttwo]]
接下来构建转置列表:
keys = d[0].keys()
transposed = [[e[k] for k in keys] for e in d]
最后,转置并使用csv.writer
将其写入文件:
with open("a.csv", "wb") as f:
csv.writer(f).writerows(zip(keys, *transposed))
答案 1 :(得分:2)
您确定输入数据不能用2元组而不是dicts表示吗?
如果答案是否定的,那么到目前为止我看到的其他解决方案将不适用于所有可能的情况,例如在dict中具有多个条目的输入项。这个将:
from collections import defaultdict
lstone = [{'dc_test': 1}, {'ac_test':2}, {'con_test':3}]
lsttwo = [{'dc_test': 4}, {'ac_test':5}, {'con_test':6}]
# merge
merge = defaultdict(list)
for e in lstone + lsttwo:
for k, v in e.items():
merge[k].append(v)
# flatten
result = [ [k] + v for k, v in merge.items()]
print result
# your option as to how to convert to CSV
答案 2 :(得分:1)
这是您创建列表的方法:
def makeLists(*lists):
for dicts in zip(*lists):
key = dicts[0].iterkeys().next()
yield [key] + [d[key] for d in dicts]
newlistone, newlisttwo, newlistthree = makeLists(lstone, lsttwo)
此代码假定每个列表包含相同数量的词典,并且相应的词典完全包含具有相同键的条目。
要将其全部写入文件,请使用:
with open("test.txt", "w") as file:
file.write(",".join(newlistone) + "\n")
# other lines individually
您还可以将所有列表放在一个列表中,并在写入文件时循环遍历它们。