Хранить словарь со значениями списка в CSV, используя Python - PullRequest
0 голосов
/ 05 ноября 2018

Это моя словарная структура

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

Но он помещает каждый элемент значения в ячейку. Есть ли лучший способ?

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Если вы можете использовать стороннюю библиотеку, это просто для 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)
0 голосов
/ 05 ноября 2018

Линии, которые вы показали, вот так:

 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, которые могут сохранять словарные структуры.
0 голосов
/ 05 ноября 2018

Вы можете использовать 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])
...