【问题标题】:Combining Multiple Lists of Dictionaries while Writing to JSON file在写入 JSON 文件时组合多个字典列表
【发布时间】:2015-01-02 07:18:10
【问题描述】:

在收集了一堆字典列表并编写了一个字典列表后,我正在尝试编写一个 JSON 文件。到目前为止,输出已经在 dict 列表中附加了空格。 我想弄清楚如何在整个输出上添加括号,同时用逗号分隔每个索引。

** 我希望 JSON 文件在 Deals_list 中的每笔交易后更新 **

url_page 函数输出:

deals_list=[{u'all_deals_links': u'http://www.groupon.com/deals/the-ballet-academy-newark'}{u'all_deals_links': u'http://www.groupon.com/deals/clean-extreme-1'}]

[{....}]

这是输出:

[{"time_retrieved": "2014-11-06 09:45:28.619697", "amount_sold": ["Over 20 bought", "Over 10   bought”]}][{“time_retrieved": "2014-11-06 09:45:29.907905", "amount_sold": "Over 230 bought”}]

我想要的是:

[[{..,{},..}]]

[[{"time_retrieved": "2014-11-06 09:45:28.619697", "amount_sold": ["Over 20 bought", "Over 10   bought”]}],[{“time_retrieved": "2014-11-06 09:45:29.907905", "amount_sold": "Over 230 bought”}]]

基本上,代码会遍历一个 groupon 页面链接列表并使用 url_page 提取数据

    page_data_list=[]


    with open('Updated_sample_groupon_page_data_test.json', 'a') as jsonfile:
        for data in range(starting_deal_number, len(deals_list)-1):
            page_data_list.append(url_page(str(deals_list[data]['all_deals_links'])))

            for f in page_data_list:    
                json.dump(f, jsonfile, encoding='utf8')

【问题讨论】:

  • 你为什么还要打开jsonfile对象两次?
  • 我不太确定。我以为我必须先写它然后打开它以进行附加。
  • 不,如果文件尚不存在,打开附加文件也会创建。
  • 顺便说一句,我完全不知道您要达到的目标。您是否有任何示例输入数据以及希望在输出中看到的更具体的内容?

标签: python json list dictionary io


【解决方案1】:

也许是这样的:

page_data_list = []

for data in range(starting_deal_number, len(deals_list)-1):
    page_data_list.append(url_page(str(deals_list[data]['all_deals_links'])))

with open('Updated_sample_groupon_page_data_test.json', 'w') as jsonfile:
    json.dump(page_data_list, jsonfile, encoding='utf8')

或更简单地说:

page_data_list = []

for deal in deals_list:
    page_data_list.append(url_page(str(deal['all_deals_links'])))

with open('Updated_sample_groupon_page_data_test.json', 'w') as jsonfile:
    json.dump(page_data_list, jsonfile, encoding='utf8')

编辑:如果每次附加到 page_data_list 时都必须更新 JSON 文件,并且可以承受 IO 命中,则只需在每次迭代时将整个列表重写为 JSON 文件:

page_data_list = []

for deal in deals_list:
    page_data_list.append(url_page(str(deal['all_deals_links'])))

    with open('Updated_sample_groupon_page_data_test.json', 'w') as jsonfile:
        json.dump(page_data_list, jsonfile, encoding='utf8')

不过,我不建议这样做,因为根据经验,磁盘 IO 始终是最大的瓶颈,而 RAM 和 CPU 时间充足。在大块 IO 中写入一次通常也比许多较小的 IO 更可取,如果您手动修改输出 JSON 并一次只从 page_data_list 写入一项,您会这样做。也就是说,您的操作系统上的 IO 升降机可能会让人不明显,这取决于您编写的频率。

【讨论】:

  • 我的意思是,我不想事先在列表中收集数据,然后将其放入 jsonfile 中,而是希望在交易列表中收集的每笔交易之后写入 jsonfile
  • 嗯,我不得不问,为什么?一切都被放入一个列表中,所以我认为没有内存限制。在您完成外部列表之前,JSON 文件将不是有效的 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2018-08-18
  • 2020-04-11
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多