[英]Python: How to write to csv a dict of list “in line”?
我希望將我的列表字典寫入 csv 文件,我需要按鍵名對行進行排序:
import csv
dict_of_list = {"key1": [1,2,3], "key2": [4,5,6], "key3": [7,8,9]}
#line bugged corrected bellow:
# keys = sorted(dict_of_list.keys())
writer.writerows(sorted([k, *vs] for k, vs in dict_of_list.items()))
with open("P:/Code/Python/CSV/dict_of_list.csv", "w") as tmp:
writer = csv.writer(tmp)
writer.writerows(zip(dict_of_list.items()))
我需要像這樣訂購 csv 文件:
key1, 1, 2, 3
key2, 4, 5, 6
key3, 7, 8, 9
實際上我的 output csv 是:
"('key1', [1, 2, 3])"
"('key2', [4, 5, 6])"
"('key3', [7, 8, 9])"
我試過其他代碼,但我只能把鑰匙放在 header 或者根本沒有鑰匙。
如果有人能給我一個推動,我將不勝感激。
問題是您正在編寫元組,而是這樣做:
import csv
dict_of_list = {"key2": [4, 5, 6], "key3": [7, 8, 9], "key1": [1, 2, 3], }
with open("output.csv", "w") as tmp:
writer = csv.writer(tmp)
writer.writerows([k, *vs] for k, vs in sorted(dict_of_list.items()))
Output
key1,1,2,3
key2,4,5,6
key3,7,8,9
表達方式:
[k, *vs] for k, vs in dict_of_list.items()
創建一個列表,其中第一個元素是鍵,元素的 rest 是值。 更新*vs
解包列表的元素,請參見此處。 如果您希望元素按鍵排序,請按照@tdelaney 的建議執行此操作:
writer.writerows(sorted([k, *vs] for k, vs in dict_of_list.items()))
您可以使用pandas
庫代替自己管理文件的寫入。
為此,您只需從字典中創建一個 pandas DataFrame (如表格),方向設置為orient=index
,因為您的字典鍵應該用作表格的行。 然后你只需使用 DataFrame 方法to_csv
來編寫你的 csv 文件。 當您不想要 header 時,可以使用header=False
參數。
import pandas as pd
df = pd.DataFrame.from_dict(dict_of_list, orient="index").sort_index()
df.to_csv("test.csv", sep=";", header=False)
這個問題也可以使用pandas的方法to_csv()來解決
import pandas
dict_of_list = {"key1": [1,2,3], "key2": [4,5,6], "key3": [7,8,9]}
df = pandas.DataFrame(dict_of_list)
df.T.sort_index().to_csv("test.csv",sep=";",header=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.