【问题标题】:Store dictionary with list values in csv using python使用python在csv中存储带有列表值的字典
【发布时间】:2019-04-09 00:25:45
【问题描述】:

这是我的字典结构

dic = {'tt3832096': ['remake', 'horror-movie-remake', 'flesh-eating-virus', 'gore'],
       'tt6217804': ['chainsaw', 'sequel', 'second-part', 'mable-simmons-character']}

我想将它保存在 csv 文件中,如下所示:

movie id      keyword
tt3832096     ['remake', 'horror-movie-remake', 'flesh-eating-virus', 'gore']
tt6217804     ['chainsaw', 'sequel', 'second-part', 'mable-simmons-character']

我试过这个:

with open('test.csv', 'w') as f:
    for key in dic.keys():
        f.write("%s:%s\n"%(key,dic[key]))

但是它将每个值项放在一个单元格中。有没有更好的办法?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 这方面有很多来源。查看我们的thisthis
  • 正确的 csv 结构是每个电影 ID/关键字对有一行。

标签: python csv dictionary export-to-csv


【解决方案1】:

您可以使用csv.writer 和制表符作为分隔符:

import csv
d = {'tt3832096': ['remake', 'horror-movie-remake', 'flesh-eating-virus', 'gore'], 'tt6217804': ['chainsaw', 'sequel', 'second-part', 'mable-simmons-character']}
with open('output.csv', 'w') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerow(['movie id', 'keyword'])
    for k, v in d.items():
        writer.writerow([k, v])

【讨论】:

    【解决方案2】:

    如果您可以使用 3rd 方库,这对 Pandas 来说是微不足道的:

    import pandas as pd
    
    # construct dataframe from dictionary d
    df = pd.DataFrame(list(d.items()), columns=['movie id', 'keyword'])
    
    # export to csv
    df.to_csv('file.csv', index=False)
    

    确实,如果您打算将文件读回 Python,则建议您这样做。在这种情况下,您可以使用 Pickle(取决于版本)来存储和获取包含列表值的字典:

    import pickle
    
    with open('d_file.pkl', 'wb') as fout:
        pickle.dump(d, fout, protocol=pickle.HIGHEST_PROTOCOL)
    
    with open('d_file.pkl', 'rb') as fin:
        d = pickle.load(fin)
    

    【讨论】:

      【解决方案3】:

      你显示的线条,像这样:

       tt3832096     ['remake', 'horror-movie-remake', 'flesh-eating-virus', 'gore']
      

      不是 CSV 文件的一部分,或者至少不是具有您正在考虑的结构的 CSV 文件。作为 CSV 记录,这是一行有四个值,看起来像这样(或类似的东西,取决于解码时引号字符的处理方式)。

       tt3832096     ['remake'
       'horror-movie-remake'
       'flesh-eating-virus'
       'gore']
      

      如果您真的想将其保存为 CSV 文件,最好的选择是如下所示:

       'tt3832096', 'remake', 'horror-movie-remake', 'flesh-eating-virus', 'gore'
      

      这应该与您现在制作的相似。

      如果您想以一种更像它所来自的字典的格式存储它,您有几个选择:

      1. 扩展您自己的格式(如您所描述的格式)并将其作为文本进行读写(不使用 CSV 库)。
      2. 使用内置的 Python 序列化库 pickle 将保留结构,但会生成人类不可读的文件。
      3. 使用 json 库之一使用 JSON 序列化,该库生成可以保留字典结构的人类可读的标准 json 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 2021-04-26
        • 2017-10-01
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 2018-10-18
        相关资源
        最近更新 更多