1

私は現在、辞書のリストを持っています。辞書には、このようなキーワードでソートされたリストが含まれています。各辞書のリストは同じ長さですが、辞書ごとに異なり、すべての辞書に同じ数のキーワードがあります。

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] = {...}

各辞書から2つのリスト(たとえば、「He​​ader1」と「Header5」)を抽出し、他のリストほど長くないリスト用に空白を埋めて、それらを.csvファイルに並べて配置します。

これを行うにはizip_longestを使用したいとほぼ100%確信していますが、これを実現するための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)
4

1 に答える 1

1

Maybe this?

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)]]
于 2012-06-08T17:38:09.130 に答える