【问题标题】:How to split a dictionary into an iterator object in Python如何在 Python 中将字典拆分为迭代器对象
【发布时间】:2018-11-24 16:25:44
【问题描述】:

我正在从 Yahoo Finance API 抓取一些信息。我目前正在从某个公司的某个时间段获得所有股息。我创建了以下类来为公司建模:

class Company:
    def __init__(self, symbol, dividends):
        self.symbol = symbol
        self.dividends = dividends
    def __iter__(self):
        return iter([self.symbol, self.dividends])

股息始终是以下形式的字典:

{'2016-08-04': '0.57', '2018-05-11': '0.73', '2017-08-10': '0.63', '2018-02-09': '0.63', '2017-05-11': '0.63', '2017-11-10': '0.63', '2017-02-09': '0.57', '2016-11-03': '0.57'}

我想从中创建一个 csv 文件,其中每一行如下所示:

但我是通过运行脚本得到的:

这是我用来写入 csv 文件的代码:

def write_into_csv_file(company):
    with open('/Users/rodrigopeniche/Documents/workspace/WebScraping/yahoo_historical.csv', 'a') as csv_file:
        wr = csv.writer(csv_file, delimiter=',')
        wr.writerow(list(company))

我可以做些什么来实现前面所说的?

【问题讨论】:

    标签: python list csv dictionary iterator


    【解决方案1】:

    使用 itertools.chain.from_iterable 将您的 dict 项扁平化为常规迭代器,然后使用它来构建包含符号的迭代器

    from itertools import chain
    
    class Company:
        def __init__(self, symbol, dividends):
            self.symbol = symbol
            self.dividends = dividends
        def __iter__(self):
            return chain((self.symbol,), chain.from_iterable(self.dividends.items()))
    

    【讨论】:

    • 这就是我要写的答案。
    • @g.d.d.c +1,我花了太多时间考虑datetime 排序(OP 是否需要)。
    【解决方案2】:

    字典有 values() 方法将其值作为迭代器返回,因此您可以使用 wr.writerow(list(company.dividends.values()))。但是,这很可能不会在您的 csv 的同一列中排列同一日期的股息。我建议使用熊猫。您可以创建一个数据框,然后用每一行作为公司的股息来填充它。

    import pandas as pd
    dividends_by_company = 
       pd.DataFrame([company.dividends for company in company_list],
           index = company_list] 
    dividends_by_company.to_csv(
        '/Users/rodrigopeniche/Documents/workspace/WebScraping/yahoo_historical.csv')
    

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 2011-06-02
      • 2020-09-13
      • 1970-01-01
      • 2021-11-17
      • 2020-03-27
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多