使用python在csv中存储具有列表值的字典

2024-05-13 16:12:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的字典结构

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]))

但它把每一个值项放在一个单元格中。有更好的办法吗


Tags: keymoviesecondpartdicvirussequeleating
3条回答

可以使用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])

如果您可以使用第三方库,这对于熊猫来说是微不足道的:

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)

你展示的台词是这样的:

 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文件

相关问题 更多 >