Сохранение defaultdict (списка) в CSV-файл - PullRequest
2 голосов
/ 07 марта 2019

Я пытался сохранить свой словарь в CSV-файл.Поэтому я хочу, чтобы он выглядел примерно так:

Subject                           value1   concussion
network3_UCA_0073_01_(0, 1)        0.57     no 
network3_UCA_0073_02_(0, 1)        0.64     no 
network3_UCA_0073_03_(0, 1)        0.59     no 
network3_UCA_0075_01_(0, 1)        0.69     no

Словарь выглядит так:

{}
{}
{}
{}
{}
{}
{'network3_UCA_0073_01_(0, 1)': [(0.57, 'no')]}
{'network3_UCA_0073_02_(0, 1)': [(0.64, 'no')]}
{'network3_UCA_0073_03_(0, 1)': [(0.59, 'no')]}
{}
{}
{'network3_UCA_0075_01_(0, 1)': [(0.69, 'no')]}
{'network3_UCA_0075_02_(0, 1)': [(0.62, 'no')]}
{'network3_UCA_0075_03_(0, 1)': [(0.57, 'no')]}
{'network3_UCA_0076_01_(0, 1)': [(0.38, 'no')]}
{'network3_UCA_0076_02_(0, 1)': [(0.60, 'no')]}
{'network3_UCA_0076_03_(0, 1)': [(0.68, 'no')]}
{'network3_UCA_0077_01_(0, 1)': [(0.64, 'no')]}
{'network3_UCA_0077_02_(0, 1)': [(0.58, 'no')]}
{'network3_UCA_0077_03_(0, 1)': [(0.48, 'no')]}

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

with open(dirforR , 'a') as f:                                         
    writer = csv.writer(f)      
    writer.writerow(['Subject', 'value1', 'concussion'])                             

    for row in sorted_combined:                                        
        #print row[0]                                                   

        l = [row[0]]                                                   
        l.append(row[1][0])                                            
        l.append(row[1][1])                                            
        writer.writerow(l)                                             

Я не уверен, так ли это, потому что ключи словаря разделены \ n, но любая помощь будет принята с благодарностью.Я пытался понять это без надежды.

Спасибо за вашу помощь.Я надеюсь услышать скоро.********* РЕДАКТИРОВАТЬ ***********

Я понял, что это не обычный словарь, на самом деле он настроен на:

sorted_combined = defaultdict(list)

причина этого в том, что я объединил два словаря, и это был единственный способ, которым я смог это сделать .. Теперь я не совсем уверен, как переместить мой список словарей в файл CSV.

Извините, это немного запутанно.

*** EDIT2 *** это код, который использовался для создания моего списка по умолчанию, называемый: network_combined

network3 = defaultdict(list)    
combined_MDD = {key : (MDD_network3[key], MDD_network3_yesno[key]) for key 
in MDD_network3}                                                                   
combined_HC = {key : (HC_network3[key], HC_network3_yesno[key]) for key in HC_network3}
for k, v in chain(combined_MDD.items(), combined_HC.items()):             
     network3[k].append(v)                                                
sorted_combined = {k:v for k,v in network3.items() if k.endswith('(0, 1)')}                                                      

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы можете использовать для этого словарь csv, просто выполните:

import csv
csv.DictWriter(open("path/to/writefile.csv","wb"),fieldnames=dict_to_write[dict_to_write.keys()[0]].keys(),delimiter=","")

или вы можете использовать панд как более простой вариант:

import pandas as pd
pd.DataFrame(dict_to_write).to_csv("file.csv")

для вашего конкретного случая использованияПредполагая, что образец, который вы дали, находится в файле:

import pandas as pd
with open("dictionary.txt","r") as file:
    raw_d=file.read().splitlines()
    raw_d=[eval(x) for x in raw_d if len(x)>2]
pd.DataFrame([(k,v[0][0],v[0][1]) for x in raw_d for k,v in x.items()]).to_csv("converted_dict.csv")
1 голос
/ 07 марта 2019

С некоторым редактированием я думаю, что смог работать с вашим примером

with open(dirforR , 'a') as f:                                         
writer = csv.writer(f)      
writer.writerow(['Subject', 'value1', 'concussion'])                             

for row in sorted_combined:                                        
    if len(row)==0:
        pass
    else:
      l=[val[0] for val in row.items()]
      for value in list([val[0] for val in row.values()][0]):
          l.append(value)
    writer.writerow(l)

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...