簡體   English   中英

如何將不同長度的列表字典寫成 csv?

[英]How to write a dictionary of lists with different length to csv?

我想在 python 長度與 csv 不同的列表字典之后寫這個。

dic = {'a': ['ACI', 'BBY', 'AMRX'], 'b': ['ABM', 'AG']}

預期的 output 是:

預期輸出

import pandas as pd
dic = {'a': ['ACI', 'BBY', 'AMRX'], 'b': ['ABM', 'AG']} 
df = pd.DataFrame.from_dict(dic, orient='index') #Convert dict to df
print(df)
df.to_csv("final.csv",header=False) #Convert df to csv

使用csv模塊:

# convert your dict to a list
lst = [[k] + v for k, v in dic.items()]

# write all rows at once
with open('test.csv', 'w') as csvfile:
    writer = csv.writer(csvfile, delimiter=',')
    writer.writerows(lst)
>>> %cat 'test.csv'
a,ACI,BBY,AMRX
b,ABM,AG

只需遍歷 dict 的值並將它們寫入文件即可。
不需要外部庫。

dic = {'a': ['ACI', 'BBY', 'AMRX'], 'b': ['ABM', 'AG']}
with open('out.csv', 'w') as f:
    for key, values in dic.items():
        f.write(key + ',' + ','.join(values) + '\n')

輸出.csv

a,ACI,BBY,AMRX
b,ABM,AG

python 的 vanilla csv模塊中沒有“等長”要求。 簡單地遍歷字典並輸出行就可以了

import csv

dic = {'a': ['ACI', 'BBY', 'AMRX'], 'b': ['ABM', 'AG']}
with open('/path/to/output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    # python `dicts` are unordered, but assuming you 
    # want the rows in key-alphabetical order 
    for key, vals in sorted(dic.items(), key=lambda k: k[0]):
        writer.writerow([key] + vals)

但是,如果您想確保線條的長度相等,您可以先運行一次以計算出最大長度:

max_len = max(len(val) for val in dic.values()) 

然后在寫出每一行時相應地填寫

writer.writerow([key] + vals + [None] * (max_len - len(vals)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM