pprintをcsv出力する方法について


python初心者です。  
今、以下のようなデータを

[code]

    [{'target': 0.7784212030131844, 'params': {'max_features': 0.930055846603754, 'min_samples_split': 15.28549923074499, 'n_estimators': 166.1393782636472}}, {'target': 0.7785257751009637, 'params': {'max_features': 0.8211760874650731, 'min_samples_split': 16.400614250497348, 'n_estimators': 111.92312397601592}}, {'target': 0.776748024491158, 'params': {'max_features': 0.8527202619237652, 'min_samples_split': 10.276640212585447, 'n_estimators': 116.17540832901375}}, {'target': 0.7806172465875361, 'params': {'max_features': 0.29610611942435106, 'min_samples_split': 19.14282946636424, 'n_estimators': 67.72864397106717}}, {'target': 0.7804996097807776, 'params': {'max_features': 0.22739455976528197, 'min_samples_split': 15.042813808805764, 'n_estimators': 119.9583310838621}}, {'target': 0.7789571409861411, 'params': {'max_features': 0.9341048879929642, 'min_samples_split': 20.243872075020587, 'n_estimators': 228.1899735138356}}, {'target': 0.7711794688046322, 'params': {'max_features': 0.1937909307963061, 'min_samples_split': 4.557090171066585, 'n_estimators': 78.97987307596247}}, {'target': 0.7802251051028884, 'params': {'max_features': 0.552926909013341, 'min_samples_split': 22.404901421882023, 'n_estimators': 130.17874315815246}}]
    
[/code]

以下のように、pprintしたデータにおいて（長いので省略形にしています）

[code]

    [{'params': {'max_features': 0.930055846603754,
                 'min_samples_split': 15.28549923074499,
                 'n_estimators': 166.1393782636472},
      'target': 0.7784212030131844},
     {'params': {'max_features': 0.8211760874650731,
                 'min_samples_split': 16.400614250497348,
                 'n_estimators': 111.92312397601592},
      'target': 0.7785257751009637},
     {'params': {'max_features': 0.8527202619237652,
                 'min_samples_split': 10.276640212585447,
                 'n_estimators': 116.17540832901375},
      'target': 0.776748024491158}]
    
[/code]

csv出力したいのですが、データ成形の方法がわかりません。

'target', 'max_features', 'min_samples_split',
'n_estimators'の計4つを項目として値を出力したいです。どのようにすればよろしいですか？

※pprint以外の出力方法で可能であればそちらでも構いません。




以下は
[csv.DictWriter](https://docs.python.org/3.8/library/csv.html#csv.DictWriter)
を使う方法です。当該のデータは `rev` という変数に格納されているという前提で、ファイル `data.csv`
に出力します。また、`lineterminator='\n'` を指定していますので `data.csv` ファイルの改行コードは
newline(`0x0a`) になります。`lineterminator='\n'` を指定しない場合、改行コードは `\r\n(0x0d0a)`
となりますので Windows OS では必要ないかも知れません。

[code]

    import csv
    
    with open('data.csv', 'w') as csvfile:
      fields = ['target', 'max_features', 'min_samples_split', 'n_estimators']
      writer = csv.DictWriter(csvfile, fieldnames=fields, lineterminator='\n')
      writer.writeheader()
      for row in rev:
        writer.writerow({fields[0]: row[fields[0]], **row['params']})
    
[/code]

[code]

    $ cat data.csv
    target,max_features,min_samples_split,n_estimators
    0.7784212030131844,0.930055846603754,15.28549923074499,166.1393782636472
    0.7785257751009637,0.8211760874650731,16.400614250497348,111.92312397601592
    0.776748024491158,0.8527202619237652,10.276640212585447,116.17540832901375
    0.7806172465875361,0.29610611942435106,19.14282946636424,67.72864397106717
    0.7804996097807776,0.22739455976528197,15.042813808805764,119.9583310838621
    0.7789571409861411,0.9341048879929642,20.243872075020587,228.1899735138356
    0.7711794688046322,0.1937909307963061,4.557090171066585,78.97987307596247
    0.7802251051028884,0.552926909013341,22.404901421882023,130.17874315815246
    
[/code]




以下は
[csv.DictWriter](https://docs.python.org/3.8/library/csv.html#csv.DictWriter)
を使う方法です。当該のデータは `rev` という変数に格納されているという前提で、ファイル `data.csv`
に出力します。また、`lineterminator='\n'` を指定していますので `data.csv` ファイルの改行コードは
newline(`0x0a`) になります。`lineterminator='\n'` を指定しない場合、改行コードは `\r\n(0x0d0a)`
となりますので Windows OS では必要ないかも知れません。

[code]

    import csv
    
    with open('data.csv', 'w') as csvfile:
      fields = ['target', 'max_features', 'min_samples_split', 'n_estimators']
      writer = csv.DictWriter(csvfile, fieldnames=fields, lineterminator='\n')
      writer.writeheader()
      for row in rev:
        writer.writerow({fields[0]: row[fields[0]], **row['params']})
    
[/code]

[code]

    $ cat data.csv
    target,max_features,min_samples_split,n_estimators
    0.7784212030131844,0.930055846603754,15.28549923074499,166.1393782636472
    0.7785257751009637,0.8211760874650731,16.400614250497348,111.92312397601592
    0.776748024491158,0.8527202619237652,10.276640212585447,116.17540832901375
    0.7806172465875361,0.29610611942435106,19.14282946636424,67.72864397106717
    0.7804996097807776,0.22739455976528197,15.042813808805764,119.9583310838621
    0.7789571409861411,0.9341048879929642,20.243872075020587,228.1899735138356
    0.7711794688046322,0.1937909307963061,4.557090171066585,78.97987307596247
    0.7802251051028884,0.552926909013341,22.404901421882023,130.17874315815246
    
[/code]

