2017-01-31 1 views
-1

J'essaye donc de JSON de vider un dictionnaire créé à partir d'un fichier CSV traité en Python.Sérialisation du dictionnaire avec JSON

Méthode de création de dictionnaire:

def createUUIDDocIDLink(path): 
    dict = defaultdict 
    with open(path) as citTSV: 
     header = 0 
     for line in csv.reader(citTSV, dialect = "excel-tab"): 
     if header > 0 and line[1] not in dict: 
      dict[line[1]] = [line[0]] 
     elif header > 0 and line[1] in dict: 
      dict[line[1]].append(line[0]) 
     header += 1 
    return dict 

Méthode de dictionnaire le dumping:

def dumpCreateUUIDDocIDLink(): 
    with open("D:/Coding/FE_InOut/dumpUUIDDocIDLookup",'w') as ULookup: 
     output = json.dump(createUUIDDocIDLink("D:/Coding/FE_InOut/ipcr.tsv"),ULookup) 
    return output 

L'erreur que je reçois est:

"raise TypeError (rééd (o) +" n'est pas sérialisable JSON ")

TypeError: la classe 'collections.defaultdict' n'est pas JSON se rializable "

Où est-ce que je me trompe? Pourquoi ne puis-je pas stocker ce dict en mémoire? Est-ce que quelqu'un a une solution de contournement que je pourrais utiliser?

Merci beaucoup pour votre temps & aide, Faites-moi savoir si des éclaircissements sont nécessaires.

+0

Qu'est-ce qui vous fait penser que quelque chose a mal tourné? –

+0

'json.dump' ne renvoie rien, donc l'assigner' output' et le retourner est inutile. – Mikk

+0

Vous devez mettre en retrait le corps d'une fonction. Je suppose que c'est une erreur de copie, pas dans le vrai code. – Barmar

Répondre

1

Cette ligne:

dict = defaultdict 

est erroné. Pour déclarer une defaultdict contenant une liste que vous devez écrire:

dict = defaultdict(list) 

Mais vous n'avez pas besoin deafultdict de toute façon, parce que vous prenez soin de l'initialisation vous. Je voudrais également pas utiliser dict comme nom de variable, alors que je venais de remplacer la ligne avec:

mydict = {} 

et assurez-vous que toutes les commandes se référant à dict se réfèrent maintenant à mydict.

+0

Merci pour la réponse Mikk, je vais tester notre suggestion maintenant. – lel23

+0

Salut, votre suggestion a fonctionné tout de suite - merci beaucoup pour votre aide – lel23

+0

De rien! – Mikk