繁体   English   中英

Python列表字典理解

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM