编写一个名为“ read_prices”的函数,该函数采用一个参数,该参数是贵公司在其投资组合中拥有的股票代码的列表。您将为每个股票行情代码读取一个CSV文件,其中包含一年中每种股票的价格,并将这些价格返回到单个词典中。返回的字典将包含股票代码作为键,将字典符号作为值,其中内部字典将日期作为键(作为字符串,格式为“ YYYY-MM-DD”),价格作为浮点值。所有人都说,该词典将包含过去一年中任何日期的任何股票的价格。您可以假设输入列表中每个股票代号都将有一个名为“ .csv”的文件。例如,如果代码列表中包含“ TXN”,则在测试过程中,名为“ TXN.csv”的文件将与您的代码位于同一目录中,并且此CSV文件的每一行将采用“日期,价格,体积”格式”,其中日期的格式为YYYY-MM-DD,价格为浮动价格,交易量为整数,代表所有交易者当天交易的股票数量(此预习课不需要交易量) 。
AAPL股票的示例行: “ 2015-10-20,112.673677,48967800”
import csv
def read_prices(ticker):
with open(ticker) as f:
reader = csv.reader(f)
dict = {}
for items in reader:
if items[0] in dict:
dict[items[0]] += float(items[1]) * int(items[2])
else:
dict[items[0]] = float(items[1]) * int(items[2])
return dict
我在输入[['AAPL','GOOG','FB']]时出错。我该如何解决这个问题?
答案 0 :(得分:0)
正如作业描述中所述,您的输入文件以代码名称命名,后跟.csv
,因此您应将.csv
与代码名称连接起来作为文件名。您的函数还将输入视为一个股票代号名称,而不是股票代号名称列表,因此自然无法将列表传递给它。您应该改为遍历输入为代码列表:
import csv
def read_prices(tickers):
d = {}
for ticker in tickers:
with open(ticker + '.csv') as f:
for date, price, _ in csv.reader(f):
d.setdefault(ticker, {})[date] = float(price)
return d
或者您可以使用dict理解来完成相同的操作:
def read_prices(tickers):
return {ticker: {date: price for date, price, _ in csv.reader(open(ticker + '.csv'))} for ticker in tickers}