首页 > 解决方案 > 使用日期作为键将日期和股票价格列表制作成字典并将价格转换为浮点数-python

问题描述

我正在创建一个用户输入文件名的程序。文件 apple.dat 包含苹果的所有日期和股票价格。现在我将所有数据都放在一个列表中。我需要一些帮助将列表放入字典并使用日期(保留为字符串)作为键并将股票价格转换为浮点值。

苹果.dat 文件

Date,Open,High,Low,Close,Adj Close,Volume
2020-01-02,74.059998,75.150002,73.797501,75.087502,74.333511,135480400
2020-01-03,74.287498,75.144997,74.125000,74.357498,73.610840,146322800

我得到的输出

['2020-01-02,74.059998,75.150002,73.797501,75.087502,74.333511,135480400\n', '2020-01-03,74.287498,75.144997,74.125000,74.357498,73.610840,146322800\n'...]

代码

def createdict(file_name):
  with open('apple.dat','r') as f:
    lines = f.readlines()[1:]
  return lines
 

def main():
  print("Welcome to the Stock Price Program")
  print()
  file_name=input("Enter the data file name: ")

  list=createdict(file_name)
  print(list)

标签: pythondictionarytext-files

解决方案


这是一种使用 csv 库(特别是DictReader构造函数)的方法。它使解决方案更简单地按名称寻址字段名,而不是按列号寻址它们。

import csv

apl_stk = list()

with open('apple.dat', 'r') as f:
    reader = csv.DictReader(f)

    for dictionary in reader:
        apl_stk.append(dictionary)

def avg(L, field):
    return sum(map(lambda x: float(x[field]), L)) / len(L)

def minimum(L, field):
    return min(map(lambda x: float(x[field]), L))


print(f"Avg. high: {avg(apl_stk, 'High'):.6f}")
print('minimum open:', minimum(apl_stk, 'Open'))

对于您的示例输入数据,将打印:

Avg. high: 75.147500
minimum open: 74.059998

推荐阅读