2017-04-17 1132 views
0

我试图将以下字典保存为csv。我的词典内容的格式是:将字典保存为CSV python

dict = {0:[u'ab', u'cd'], 1:[u'b'], 2: [u'Ge', u'TT'], 3: [u'Stas'], 4: [u'sap', u'd3', u'ch99']}. 

我的代码是:

with open('Cr_pt.csv', 'wb') as f: 
     writer = csv.writer(f) 
     writer.writerow(dict.keys()) 
     writer.writerows(zip(*dict.values())). 

下面是我想在CSV保存格式。

1 2 3 4 
    ab Ge Stas sap 
    cd TT  d3 
       ch99 

但是我得到我的最终CSV从字典中只有很少的值,如:

1 2 3 4 
    ab Ge Stas sap 
+0

什么是你想要的输出格式,给出的字典输入你提供的? –

+0

请参阅下面的答案 –

回答

1

首先,您应该避免使用dict作为变量名称,因为它会影响a built-in

手头的问题很简单,用​​来解决;

import pandas as pd 
df = pd.DataFrame.from_dict(dict, orient='index').T.to_csv('Cr_pt.csv', index=False) 

输出:

$ cat Cr_pt.csv 
0,1,2,3,4 
ab,b,Ge,Stas,sap 
cd,,TT,,d3 
,,,,ch99 
0

这里有一个解决方案,写入到一个CSV文件直接不使用csv模块并限定每一行与逗号,创建逗号分隔值的文件(CSV):

data = {0:[u'ab', u'cd'], 1:[u'b'], 2: [u'Ge', u'TT'], 3: [u'Stas'], 4: [u'sap', u'd3', u'ch99']} 
delimiter = "," 

with open('data.csv', 'w') as data_file: 
    keys = [str(key) for key in data.keys()] 
    values = data.values() 
    max_values = max([len(value) for value in values]) 
    data_file.write(delimiter.join(keys) + "\n") 
    for line in range(0, max_values): 
     line_values = [] 
     for key in keys: 
      try: 
       line_values.append(data[int(key)][line]) 
      except: 
       line_values.append("") 
     data_file.write(delimiter.join(line_values) + "\n") 

输出:

0,1,2,3,4 
ab,b,Ge,Stas,sap 
cd,,TT,,d3 
,,,,ch99 

在这种格式中,从文件读取数据到另一个脚本会更容易,因为这些值只能用逗号分隔,而不能用可变长度的空格分隔。