Write dictionary of lists to a CSV file

后端 未结 6 911
星月不相逢
星月不相逢 2020-12-01 08:01

I\'m struggling with writing a dictionary of lists to a .csv file.

This is how my dictionary looks like:

dict[key1]=[1,2,3]
dict[key2]=[4,5,6]
dict[k         


        
相关标签:
6条回答
  • 2020-12-01 08:14

    If you don't care about the order of your columns (since dictionaries are unordered), you can simply use zip():

    d = {"key1": [1,2,3], "key2": [4,5,6], "key3": [7,8,9]}
    with open("test.csv", "wb") as outfile:
       writer = csv.writer(outfile)
       writer.writerow(d.keys())
       writer.writerows(zip(*d.values()))
    

    Result:

    key3    key2    key1
    7       4       1
    8       5       2
    9       6       3
    

    If you do care about order, you need to sort the keys:

    keys = sorted(d.keys())
    with open("test.csv", "wb") as outfile:
       writer = csv.writer(outfile, delimiter = "\t")
       writer.writerow(keys)
       writer.writerows(zip(*[d[key] for key in keys]))
    

    Result:

    key1    key2    key3
    1       4       7
    2       5       8
    3       6       9
    
    0 讨论(0)
  • 2020-12-01 08:17

    Roll your own without the csv module:

    d = {'key1' : [1,2,3],
         'key2' : [4,5,6],
         'key3' : [7,8,9]}
    
    column_sequence = sorted(d.keys())
    width = 6
    fmt = '{{:<{}}}'.format(width)
    fmt = fmt*len(column_sequence) + '\n'
    
    output_rows = zip(*[d[key] for key in column_sequence])
    
    with open('out.txt', 'wb') as f:
        f.write(fmt.format(*column_sequence))
        for row in output_rows:
            f.write(fmt.format(*row))
    
    0 讨论(0)
  • 2020-12-01 08:18
    key_list = my_dict.keys()    
    limit = len(my_dict[key_list[0]])    
    
    for index in range(limit):    
      writefile.writerow([my_dict[x][index] for x in key_list])
    
    0 讨论(0)
  • 2020-12-01 08:21

    Given

    dict = {}
    dict['key1']=[1,2,3]
    dict['key2']=[4,5,6]
    dict['key3']=[7,8,9]
    

    The following code:

    COL_WIDTH = 6
    FMT = "%%-%ds" % COL_WIDTH
    
    keys = sorted(dict.keys())
    
    with open('out.csv', 'w') as csv:
        # Write keys    
        csv.write(''.join([FMT % k for k in keys]) + '\n')
    
        # Assume all values of dict are equal
        for i in range(len(dict[keys[0]])):
            csv.write(''.join([FMT % dict[k][i] for k in keys]) + '\n')
    

    produces a csv that looks like:

    key1  key2  key3
    1     4     7
    2     5     8
    3     6     9
    
    0 讨论(0)
  • 2020-12-01 08:22

    This will work even when the list in key are of different length.

        with myFile:  
            writer = csv.DictWriter(myFile, fieldnames=list(clusterWordMap.keys()))   
            writer.writeheader()
            while True:
                data={}
                for key in clusterWordMap:
                    try:
                        data[key] = clusterWordMap[key][ind]
                    except:
                        pass
                if not data:
                    break
                writer.writerow(data)
    

    You can use pandas for saving it into csv:

    df = pd.DataFrame({key: pd.Series(value) for key, value in dictmap.items()})
    df.to_csv(filename, encoding='utf-8', index=False)
    
    0 讨论(0)
  • 2020-12-01 08:32

    save:

    with open(path, 'a') as csv_file:
        writer = csv.writer(csv_file)
        for key, value in dict_.items():
            writer.writerow([key, ','.join(value)])
    csv_file.close()        
    print ('saving is complete') 
    

    read back:

    with open(csv_path, 'rb') as csv_file:
        reader = csv.reader(csv_file);
        temp_dict = dict(reader);
    mydict={k:v.split(',') for k,v in temp_dict.items()}    
    csv_file.close()
    return mydict 
    
    0 讨论(0)
提交回复
热议问题