2010-07-05 6 views
1

J'ai une fonction qui accepte une liste d'objets de date et doit envoyer le dictionnaire suivant JSON:Comment créer une structure de données qui sera sérialisée ce format JSON en python?

{ 
    "2010":{ 
     "1":{ 
     "id":1, 
     "title":"foo", 
     "postContent":"bar" 
     }, 
     "7":{ 
     "id":2, 
     "title":"foo again", 
     "postContent":"bar baz boo" 
     } 
    }, 
    "2009":{ 
     "6":{ 
     "id":3, 
     "title":"foo", 
     "postContent":"bar" 
     }, 
     "8":{ 
     "id":4, 
     "title":"foo again", 
     "postContent":"bar baz boo" 
     } 
    } 
} 

Fondamentalement, je voudrais accéder à mes objets par année et numéro mois.
Quel code peut convertir une liste à ce format dans python qui peut être sérialisé au dictionnaire ci-dessus dans json?

Répondre

4

Quelque chose le long des lignes de cela devrait fonctionner:

from collections import defaultdict 
import json 

d = defaultdict(dict) 
for date in dates: 
    d[date.year][date.month] = info_for_date(date) 
json.dumps(d) 

Où info_for_date est une fonction qui renvoie un dict comme ceux de votre question.

+0

Exactement ce que je cherchais. Merci. Mais ce n'est pas encore assez précis, en un mois je peux avoir plus d'un objet. Ce dictionnaire devrait-il contenir des listes comme valeurs définitives? Comment cela serait-il sérialisé à JSON? –

+2

@the_drow, vous pouvez utiliser 'defaultdict (lambda: defaultdict (list))'. Ensuite, faites 'd [date.année] [date.month] .append (info_for_date (date))'. Cela signifie que chaque mois contiendra un tableau JSON (d'un ou plusieurs objets JSON). –

+0

fonctionne pour moi, merci :) –

Questions connexes