Python列表字典理解

时间:2011-03-18 12:28:45

标签: python list dictionary list-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

3 个答案:

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

您还可以将所有列表放在一个列表中,并在写入文件时循环遍历它们。

相关问题