我目前有一个词典列表,其中词典包含按照这样的关键字排序的列表。每个字典中的列表长度相同,但从字典到字典各不相同,每个字典中的关键字数量相同。
dicts[file1] = {Header1:[1,2,3], Header2:[4,5,6],... etc}
dicts[file2] = {Header1:[7,8,9,0], Header2:[4,3,7,7],... etc}
...
dicts[filen] = {...}
我想从每个字典中提取两个列表(比如'Header1'和'Header5')并将它们并排放入.csv文件中,并为列表填写空白区域其他一些人。
我几乎100%肯定要这样做我想使用izip_longest,但我正在努力使用正确的izip_longest格式来实现这一目标。我想我的主要问题是我不知道该怎么放进* args才能正确循环。
非常感谢任何帮助。
编辑:按要求编码。
writefiel = open(somefile.csv, delimiter=',')
xcolumn = 'Header1'
ycolumn = 'Header5'
for i in len(dicts):
for lines in izip_longest(*dicts[i][xcolumn], fillvalue=['']*2):
writefile.writerow([dicts[i][xcolumn],dicts[i][ycolumb]])
这只是行不通,但我一直在打破我的格式,并且无法弄清楚我做得不对。
csv输出我想看起来像这样。
Header1,Header5,Header1,Header5,Header1,Header5,...
1,2,4,6,3,8...
1,2,,,3,8,...
答案:
首先,感谢大家帮助我。这就是我最终的结果。如果你看到任何方法可以改善它,我很乐意听到它,所以我可以提高我的技能。
xhold =(list(izip_longest(*(d[xcolumn] for d in dicts), fillvalue='')))
yhold =(list(izip_longest(*(d[ycolumn] for d in dicts), fillvalue='')))
writefile.writerow([xcolumn, ycolumn, '']*len(xhold))
for i in range(len(xhold)):
row=[]
for j in range(len(xhold[i])):
row=row+[xhold[i][j],yhold[i][j],'']
writefile.writerow(row)
答案 0 :(得分:1)
也许这个?
import itertools
itertools.izip_longest([1,2,3,4],[7,8])
lists_to_extract = ['Header1','Header2']
long_list_of_dicts = [{'Header1':[1,2,3], 'Header2':[4,5,6], 'Header3':[7,8,9]},
{'Header1':[7,8,9,0], 'Header2':[4,3,7,7], 'Header3':[14,13,17,17]}]
print [list(itertools.izip_longest(*(d[key] for d in long_list_of_dicts),
fillvalue=' ')) for key in lists_to_extract]
#Output:
[[(1, 7), (2, 8), (3, 9), (' ', 0)], [(4, 4), (5, 3), (6, 7), (' ', 7)]]