Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/02/2013, 10h39   #1
alexandreSeven
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
Par défaut Trier un fichier JSON

Bonjour,

J'ai une chaîne json que je voudrais trier, la clé "values" contient différents dictionnaires, chaque dictionnaire a des éléments qui doivent être trié selon la valeur numérique de leur clé "i". Par exemple, dans universe il y a "spatialunits" qui a pour valeur de "i" : 2, alors "spatialunits devra s'afficher en 3eme position.

J'ai essayé de cette manière mais ça ne marche pas, le tri ne se fait pas. Pourriez-vous m'aider à déboguer s'il vous plait?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
# -*- coding: utf8 -*-
 
from collections import OrderedDict 
 
import pprint
import json
 
 
data = {"labels":
        {
         "langdoc":"Langage documentation","locationofunitsofobservation":"Niveau de comparatisme"},
 
 
        "values":{
                  "universe":{
                              "spatialunits":{
                                              "i":2,
                                              "value":["Paris, Bruxelles, Oxford"]},
 
                              "locationofunitsofobservation":{
                                                              "i":0,
                                                              "value":["international"]},
 
 
                              "i":2,"targetgroups":{
                                                    "i":4,"value":["cadres, employés, ouvriers, militants"]},
                              "observunits":{
                                             "i":3,"value":["groupes de discussion"]},
                              "geogcover":{
                                           "i":1,"value":["nationale (France, Belgique, Royaume-Uni)"]},"studydates":{"i":5,"value":["2005-2012"]}
}                                                                                                                                                                                                   
}}}}
 
 
 
pp = pprint.PrettyPrinter(indent=4)
 
 
sort_dict = [x for x in data['values'].iteritems()]
 
pp.pprint(OrderedDict(sorted(sort_dict, key=lambda x: x[1]['i']))) # sort by key
alexandreSeven est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 12h41   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
Salut,
Si la chaîne de caractères JSON à traiter est la chose assignée à data, il serait sage que ce soit une chaîne de caractères i.e.
Code :
data = '''<<< le string json >>>'''
Pour la transformer en objet Python, il faudra faire "json_data = json.loads(data)".
Repostez votre code avec la vraie string JSON (si nécessaire).
Dans l'état c'est de la bouille.
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 17h08   #3
alexandreSeven
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
Finalement j'ai trouvé la solution :
Code :
1
2
3
4
5
6
7
8
9
10
 
new = {}
 
for k in data['values']:
    new[k] = OrderedDict(sorted([x for x in data['values'][k].iteritems() if isinstance(x[1], dict)], key=lambda x: x[1]['i'] ))
    #pp.pprint(OrderedDict(sorted([x for x in data['values'][k].iteritems() if isinstance(x[1], dict)], key=lambda x: x[1]['i'] )))
 
data['values'] = new
 
print(data)
alexandreSeven est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h02.


 
 
 
 
Partenaires

Hébergement Web