[英]Python list dictionary comprehension
我有一些包含一些词典的“列表”,例如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
首先将您的列表转换成字典
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))
您确定输入数据不能用2元组而不是字典表示吗?
如果答案是否定的,那么到目前为止,我见过的其他解决方案都无法在所有可能的情况下使用,例如输入项在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
这是创建列表的方法:
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
您还可以将所有列表放在一个列表中,并在写入文件时在它们上循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.