2017-03-01 13 views
0

次の形式の辞書を使用する関数を記述しようとしていますが、それぞれのテスト用の列(最初の辞書のキー)と異なる汚染物質の行を持つcsvファイルに書き込みますサブディクショナリ内のキー)をテストしています。各セルには、サブディクショナリの値が格納されます。辞書の形式を変更する

output=table.csv 
dictionaryEx={'run2.csv': {' ph': 25, ' escherichia coli': 14, ' enterococci': 1}, 
'run1.csv': { ' enterococci': 7, ' ph': 160, ' nickel': 3, 
' dieldrin': 4, ' barium': 1, ' trichloroethylene': 1, } 


def writeFile(dictionary) 
    with open(output,'w') as outputFile: 
    polDict={} 
    for element in dictionary: 
     print element 
     for pollutant,value in element.values(): 
      polDict[pollutant]={element:value} 
    for element in polDict: 
     outputFile.write(pollutant+','+ polDict.values()) 
outputFile.close() 

今、私は新しい辞書を作ることによって、これを達成しようとしたが、それからの書き込みで問題にして実行しています。別のデータ構造を使用する方が良いでしょうか? csvファイルがどのように見えるべきか

""、run2.csv、run1.csv \ n個のpHは、25160 \ n個の大腸菌、14、 "" \ n個の腸球菌、1,7 \ nはニッケル、 ""、 3

enter image description here

+1

出力ファイルでこれを取得する必要があります。あなたはPython IDLEでこの例を試しましたか?また、**を開いて**あなたのためにそれを行うので、最後にファイルを閉じる必要はありません。 – elena

+1

'dictionaries'でうまく動作する' csv'モジュール(https://docs.python.org/2/library/csv.html#csv.DictWriter)を使ってみませんか? –

+0

申し訳ありませんが、結果として表示されるCSVの外観を表示できますか?おそらく、これは 'csv'モジュールではかなり簡単ですが、期待している.csvファイルを明示的に指定する方が良いでしょう。 –

答えて

0

似ていますが、短い方は、あなたが最初にすべてのインデントを修正する必要があり

,run2.csv,run1.csv 
barium,,1 
dieldrin,,4 
enterococci,1,7 
escherichia coli,14, 
nickel,,3 
ph,25,160 
trichloroethylene,,1 
0

このバージョンでは、Python 3.5.1と私の作品:0:ここ

output="table.csv" 
dictionaryEx={\ 
     'run2.csv': {' ph': 25, ' escherichia coli': 14, ' enterococci': 1},\ 
     'run1.csv': {' enterococci': 7, ' ph': 160, ' nickel': 3, ' dieldrin': 4, ' barium': 1, ' trichloroethylene': 1}} 

def writeFile(dictionary): 
    with open(output,'w') as outputFile: 
     # Write the title line. 
     outputFile.write(",") 
     for key in dictionary.keys(): 
      outputFile.write(key + ",") 
     outputFile.write("\n") 

     # Generate a sorted unique list of pollutants. 
     pollutants = [] 
     for d in dictionary.values(): 
      for k in d.keys(): 
       pollutants.append(k) 
     # This sorts the list and removes duplicates. 
     pollutants = sorted(set(pollutants)) 

     # For each possible pollutant, output the pollutant's 
     # value for each CSV. 
     for p in pollutants: 
      outputFile.write(p + ",") 
      for csv in dictionary.keys(): 
       if p in dictionary[csv]: 
        outputFile.write(str(dictionary[csv][p])) 
       outputFile.write(",") 
      outputFile.write("\n") 

writeFile(dictionaryEx) 

は、私はExcelで開いたときに適切にフォーマットされ表示される出力であり、

cols = dictionaryEx.keys() 
rows = set() 
for v in dictionaryEx.values(): 
    rows.update(v.keys() 

with open('outputfile','w') as file: 
    file.write(',' + ','.join(cols) + '\n') 
    for r in sorted(rows): 
     file.write(r + ",") 
     file.write(",".join([str(d,get(r,"")) for d in dictionaryEx.values()])) 
     file.write("\n") 
,run2.csv,run1.csv, 
barium,,1, 
dieldrin,,4, 
enterococci,1,7, 
escherichia coli,14,, 
nickel,,3, 
ph,25,160, 
trichloroethylene,,1, 
関連する問題