![](/img/trans.png)
[英]How to convert a list of dictionaries to CSV format in Python, assuming the dictionaries can have different keys?
[英]How to format a list of dictionaries from CSV? - Python
我有一個股票價格數據CSV文件,我想將其放入包含日期和收盤價的字典中。
CSV看起來像這樣: date close volume open high low 2017/09/22 151.89 46575410 152.02 152.27 150.56 2017/09/21 153.39 37350060 155.8 155.8 152.75 2017/09/20 156.07 52126240 157.9 158.26 153.83 2017/09/19 158.73 20565620 159.51 159.77 158.44
我希望這樣安排最終字典:
perfect_dict = [
{'Date': '2017/09/22', 'Close': '151.89'},
{'Date': '2017/09/21', 'Close': '153.39'},
...]
我當前的代碼獲取CSV數據,並為日期和收盤價創建兩個單獨的列表。 我已經嘗試使用dict(zip(dates, close_prices)
但這並沒有像我上面提到的那樣格式化新字典。這是我的代碼:
import csv
from collections import defaultdict
# --->
columns = defaultdict(list)
with open('mydata.csv') as f:
reader = csv.DictReader(f)
for row in reader: value2,...}
for (k,v) in row.items():
columns[k].append(v)
dates = columns['date']
close_prices = columns['close']
# This is what doesn't format it right
#stock_dict = dict(zip(dates, close_prices))
#pprint.pprint(stock_dict)
如果有人能指出我正確的方向,那就太好了,謝謝!
您可以使用字典理解:
import csv
data = list(csv.reader(open('filename.csv')))
final_data = [{a:b for a, b in zip(["Date", "Close"], i[:2])} for i in data[1:]]
請注意,您無法將字典存儲在集合中,因為字典本身是不可散列的。
我認為您所針對的格式不可行-您是說要列出詞典嗎? 如所寫,這是字典的詞典,但外部詞典沒有任何鍵。
此外,如果要為給定的字典鍵設置值,則可能需要執行以下操作:
columns[k] = v
編輯:
這是否更接近您的需求? 將列實例化為空列表,然后將csv的每一行設置為字典格式並追加到該列表。
columns = []
with open('mydata.csv') as f:
reader = csv.DictReader(f)
for row in reader:
row_as_dict = {k: v for k, v in row.items()}
columns.append(row_as_dict)
通過使用pandas
讀取csv file
date
並close
列並存儲為列表 編碼
import pandas as pd
df = pd.read_csv("file_name.csv")
# read the date and close column and store as a list.
time_list = list(df['date'])
close_list = list(df['close'])
perfect_dict = []
# here take the minimum length
# because avoiding index error
take_length = min(len(time_list),len(close_list))
for i in range(take_length):
temp_dict={}
temp_dict["Date"]=time_list[i]
temp_dict["Close"] = close_list[i]
perfect_dict.append(temp_dict)
print(perfect_dict)
另一種可能的方式。
import csv
perfect_dict=[]
with open('file.csv') as f:
reader = list(csv.reader(f))
for row in reader[1:]:
temp_dict = {}
temp_dict["Date"] = row[0]
temp_dict["Close"] = row[1]
perfect_dict.append(temp_dict)
print(perfect_dict)
也許晚了一點,但是您可以使用“普通”的csv閱讀器嘗試以下解決方案,並在以后轉換數據:
columns = list()
with open('mydata.csv') as f:
reader = list(csv.reader(f))
header = reader[0]
for row in reader[1:]:
temp_dict = dict()
for idx, item in enumerate(row):
if idx < 2:
temp_dict[header[idx]] = item
columns.append(new_dict)
假設您的csv的結構如您所展示的(標題為第一行,列的順序),則代碼會將原始的csv輸入轉換為字典列表。 此外, idx < 2
確保只有“日期”和“關閉”被映射到新輸出。
如果您喜歡大寫的列標題,只需在第4行之后添加header = list(map(lambda x: x.capitalize(), header))
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.