2016-03-14 3 views
0

Как написать словарь в CSV или TSV, когда мои данные выглядит следующим образом (несколько элементов в ключ):записи словаря в файл (CSV или TSV), где ключ несколько элементов

defaultdict(<type 'list'>, {('1_719263', 35, 4): [(1, 1, 'KEEP')]) 

где ключ ('1_713', 35, 4) и значение [(1, 1, 'KEEP')].

Я хотел использовать json или даже csv.writer.

Я также попытался это:

with open (output_name, "a") as f: 
    f.write(first_line + "\n") 
    for key, value in x_y_output.iteritems(): 
     f.write(str((key, value)) + "\n") 

Но это не работает, и я не могу избавиться от (), [], {} и т.д.

+0

Ваш образец ДИКТ пропавшие закрывающий '}'? – ChrisFreeman

ответ

0

Вы можете попробовать форматирование строки вывода, как TAB разделенных строки:

with open (output_name, "a") as f: 
    f.write(first_line + "\n") 
    for key, value in my_dict.items(): 
     f.write("{}\t{}\n".format(key, value)) 

Затем при чтении данных, вы можете восстановить его с помощью:

new_dict = {} 
with open (output_name, "r") as f: 
    for line in f: 
     inline_list = line.rstrip.split('\t') 
     new_dict[eval(inline_list[0])] = eval(inline_list[1]) 

Примеры в оболочке Python:

>>> src_dict 
{('1_719263', 35, 4): [(1, 1, 'KEEP')]} 
>>> for key, value in d.items(): 
...  outstring = "{}\t{}\n".format(k,v) 
...  # write to file 
... 
>>> outstring 
"('1_719263', 35, 4)\t[(1, 1, 'KEEP')]\n" 
>>> instring = outstring.rstrip().split('\t') 
>>> instring 
["('1_719263', 35, 4)", "[(1, 1, 'KEEP')]"] 
>>> new_dict = {} 
>>> new_dict[eval(instring[0])] = eval(instring[1]) 
>>> new_dict 
{('1_719263', 35, 4): [(1, 1, 'KEEP')]}