2017-04-13 121 views
0

我在形式元組的列表:如何將元組列表寫入一個csv文件,其中元組的第一個元素是字典?

data = [({1: 0.1723, 2: 0.890, 3: 1.0}, 'a'), 
     ({1: 0.0, 2: 1.0, 3: 0.667}, 'b'), 
     ({1: 0.223, 2: 0.336, 3: 1.0}, 'b')] 

每個元組的第二個元件是一個簡單的字符串。

如何將它寫入csv文件,以便連續的列對應於每個元素?

即:爲:col1 = 0.1723col2 = 0.890col3 = 1.0col4 = 'a'

+1

鑰匙將是連續的。 –

+0

@PeterWood是的,但你總是可以對鍵進行排序。 –

+0

@ Jean-FrançoisFabre字典中元素的順序必須保持不變,並且在整個文件中應該保持一致。 –

回答

0

您可以使用生成器表達式一次生成所有行,它們分爲兩部分。

  • 根據關鍵字排序的字典的值列表字符串
  • 單元素列表

驗證碼:

import csv 

data = [({1: 0.1723, 2: 0.890, 3: 1.0}, 'a'), 
     ({1: 0.0, 2: 1.0, 3: 0.667}, 'b'), 
     ({1: 0.223, 2: 0.336, 3: 1.0}, 'b')] 

with open("output.csv","w",newline="") as f: # python 2: just: ,"wb") 
    cw = csv.writer(f) 
    cw.writerows([v for _,v in sorted(d.items())] + [s] for d,s in data) 

創建下列文件:

0.1723,0.89,1.0,a 
0.0,1.0,0.667,b 
0.223,0.336,1.0,b 

for d,s in data只是解開字典(第一項)和值(第二項)的好方法。並且csv模塊將浮點數整數轉換爲字符串,無需爲此而煩惱。

0

,你可以做到這一點,如下所示:

import csv 

data = [({1: 0.1723, 2: 0.890, 3: 1.0}, 'a'), ({1: 0.0, 2: 1.0, 3: 0.667}, 'b'), ({1: 0.223, 2: 0.336, 3: 1.0}, 'b')] 
rows = [] 
for the_dict, the_char in data: 
    row = [] 
    # get values from dictionary and add it to row 
    for x in the_dict.values(): 
     row.append(x) 
    # add char 
    row.append(the_char) 
    # ad row to rows list 
    rows.append(row) 

with open("output.csv", "wb") as f: 
    writer = csv.writer(f) 
    writer.writerows(rows) 
0

這裏是另一種解決方案:爲'dict`不排序

import csv 

data = [({1: 0.1723, 2: 0.890, 3: 1.0}, 'a'), 
     ({1: 0.0, 2: 1.0, 3: 0.667}, 'b'), 
     ({1: 0.223, 2: 0.336, 3: 1.0}, 'b')] 

def make_row(elements): 
    row = list() 
    for obj in elements: 
     if isinstance(obj, dict): 
      row += obj.values() 
     else: 
      row.append(obj) 
    return row 

with open('output.csv', 'w') as handle: 
    writer = csv.writer(handle) 
     for row in data: 
      writer.writerow(make_row(row)) 
相關問題