Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    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

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 322
    Points : 7 423
    Points
    7 423

    Par défaut

    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

  3. #3
    Invité de passage
    Inscrit en
    mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    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)

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •