我有一个字典,其中每个键都存在(可能为空的)列表的列表。 现在我想在csv文件中编写它们。
字典:
d = {'A' : [['a', 'b'], ['a', 't', 'c']],[[],['a','b']]
'B' : [['c', 'd'], ['e']],[['f', 'g'], ['c', 'd', 'e']]}
此外,我知道第一个' A'与第一个' B'第二个列表相关,' A'到了第二个' B'等等。 希望的输出: csv文件看起来像:
A , B
a , c
b , d
a , e
t ,
c ,
, f
, g
a , c
b , d
, e
到目前为止我所做的一切都是超级的,不方便的#34;并且最终没有工作。
答案 0 :(得分:1)
我修改了你的Dic变量,使其有效:
d = {'A' : [['a', 'b'], ['a', 't', 'c'],[],['a','b']],
'B' : [['c', 'd'], ['e'],['f', 'g'], ['c', 'd', 'e']]}
以下代码将对每个dict条目中列表元素进行成对匹配。
import itertools
with open('file.csv', 'w') as fid:
fid.write("{} , {}\n".format(*d.keys()))
# first let's iterate over the element in the lists in d['a'] and d['b']
# A and B will be matched sublists
for A, B in itertools.zip_longest(d['A'],d['B'], fillvalue=''):
# next iterate over the elements in the sub lists.
# Each pair will be an entry you want to write to your file
for pair in itertools.zip_longest(A, B, fillvalue=''):
fid.write("{} , {}\n".format(*pair))
fid.write('\n')
zip_longest是这里的神奇酱汁。它做你想要的配对匹配。它将在到达最长列表的末尾时终止(而不是仅在到达最短列表的末尾时终止的zip
。
file.csv的内容:
A , B
a , c
b , d
a , e
t ,
c ,
, f
, g
a , c
b , d
, e
答案 1 :(得分:0)
手工制作的解决方案,使用纯python工具:
Dic = {'A' : [['a', 'b'], ['a', 't', 'c'],[],['a','b']],
'B' : [['c', 'd'], ['e'],['f', 'g'], ['c', 'd', 'e']]}
with open('out.csv','w') as f:
print(*Dic,sep=',',file=f) # keys
for A,B in zip(*Dic.values()):
for i in range(max(len(A),len(B))):
print(A[i] if i<len(A) else ' ',end=',',file=f)
print(B[i] if i<len(B) else ' ', file=f)
print(file=f) # blank line
对于
A,B
a,c
b,d
a,e
t,
c,
,f
,g
a,c
b,d
,e