IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Cumuler les éléments de clefs identiques


Sujet :

Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Cumuler les éléments de clefs identiques
    Bonjour,

    Je découvre la programmation python notamment avec les fichiers Json
    Dans une annale de ds on me demande fusionner deux fichiers json tout en ayant un cumul des informations contenus dans les clefs

    Voici mon JSON1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
        "dates":[
            "2000","2001","2002"
        ],
        "publications":{
            "2000":{
                "C1_article1_1":{"titre":"titre1_1","abstract":"blabla article1_1"},
                "C1_article1_2":{"titre":"titre1_2","abstract":"blabla article1_2"}},
            "2001":{
                "C1_article2_1":{"titre":"titre2_1","abstract":"blabla article2_1"},
                "C1_article2_3":{"titre":"titre2_3","abstract":"blabla article2_3"}},
            "2002":{
                "C1_article3_2":{"titre":"titre3_2","abstract":"blabla article3_2"}}
        },
        "syntheses":{
            "2000":{"nb_articles":2,"Nip":0.32},
            "2001":{"nb_articles":2,"Nip":0.32},
            "2002":{"nb_articles":1,"Nip":0.12}
        }
    }
    JSON2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
        "dates":[
            "2001","2002","2003"
        ],
        "publications":{
            "2001":{
                "C2_article1_1":{"titre":"titre1_1","abstract":"blabla article1_1"},
                "C2_article1_2":{"titre":"titre1_2","abstract":"blabla article1_2"}},
            "2002":{
                "C2_article2_1":{"titre":"titre2_1","abstract":"blabla article2_1"}},
            "2003":{
                "C2_article3_2":{"titre":"titre3_2","abstract":"blabla article3_2"}}
        },
        "syntheses":{
            "2001":{"nb_articles":2,"Nip":0.32},
            "2002":{"nb_articles":1,"Nip":0.32},
            "2003":{"nb_articles":1,"Nip":0.12}
        }
    }
    RESULTAT ATTENDU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {'dates':['2000','2001','2002','2003'],
    'publications':{
                '2000':{
                            'C1_article1_1':{'titre':'titre1_1','abstract':'blabla article1_1'},
                            'C1_article1_2':{'titre':'titre1_2','abstract':'blabla article1_2'}}
                '2001':{
                            'C1_article2_1':{'titre':'titre2_1','abstract':'blabla article2_1'},
                            'C1_article2_3':{'titre':'titre2_3','abstract':'blabla article2_3'},
                            'C2_article1_1':{'titre':'titre1_1','abstract':'blabla article1_1'},
                            'C2_article1_2':{'titre':'titre1_2','abstract':'blabla article1_2'}}
               '2002':{
                           'C1_article3_2':{'titre':'titre3_2','abstract':'blabla article3_2'},
                           'C2_article2_1':{'titre':'titre2_1','abstract':'blabla article2_1'}}
               '2003':{
                           'C2_article3_2':{'titre':'titre3_2','abstract':'blabla article3_2'}}
    },
    'syntheses':{
                  '2000':{'nb_articles':2,'Nip':0.32},
                  '2001':{'nb_articles':4,'Nip':0.64},
                  '2002':{'nb_articles':2,'Nip':0.44},
                  '2003':{'nb_articles':1,'Nip':0.12}
    }
    }
    j'ai penser à fusionner d'abord les deux fichiers et j'ai :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    {
        "dates":[
            "2000","2001","2002"
        ],
        "publications":{
            "2000":{
                "C1_article1_1":{"titre":"titre1_1","abstract":"blabla article1_1"},
                "C1_article1_2":{"titre":"titre1_2","abstract":"blabla article1_2"}},
            "2001":{
                "C1_article2_1":{"titre":"titre2_1","abstract":"blabla article2_1"},
                "C1_article2_3":{"titre":"titre2_3","abstract":"blabla article2_3"}},
            "2002":{
                "C1_article3_2":{"titre":"titre3_2","abstract":"blabla article3_2"}}
        },
        "syntheses":{
            "2000":{"nb_articles":2,"Nip":0.32},
            "2001":{"nb_articles":2,"Nip":0.32},
            "2002":{"nb_articles":1,"Nip":0.12}
        }
    }
     
    {
        "dates":[
            "2001","2002","2003"
        ],
        "publications":{
            "2001":{
                "C2_article1_1":{"titre":"titre1_1","abstract":"blabla article1_1"},
                "C2_article1_2":{"titre":"titre1_2","abstract":"blabla article1_2"}},
            "2002":{
                "C2_article2_1":{"titre":"titre2_1","abstract":"blabla article2_1"}},
            "2003":{
                "C2_article3_2":{"titre":"titre3_2","abstract":"blabla article3_2"}}
        },
        "syntheses":{
            "2001":{"nb_articles":2,"Nip":0.32},
            "2002":{"nb_articles":1,"Nip":0.32},
            "2003":{"nb_articles":1,"Nip":0.12}
        }
    }
    Maintenant je bloque sur comment cumuler les informations des clefs. Avez vous une piste s'il vous plait ?

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Hello,

    Voici un brouillon,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import json
     
    FILES = "JSON_1.json", "JSON_2.json"
     
    result = {}
    for file in FILES:
        with open(file, 'r') as f:
            data = json.load(f)
            for key, value in data.items():
                if key == "dates" and key in result:
                    result[key] += data[key]
                    result[key] = sorted(list(set(result[key])))
                elif key not in result:
                    result[key] = value
                else:
                    for year, articles in data[key].items():
                        if year not in result[key]:
                            result[key][year] = articles
                        else:
                            for article in articles:
                                if article not in result[key][year]:
                                    result[key][year][article] = data[key][year][article]
     
     
    new_json = json.dumps(result, indent=2)
    with open("JSON_RESULT.json", 'w') as f:
        f.write(new_json)
    P.S pour les membres, je reprend cette discussion d'un autre forum. D'autres réponses et d'autres informations ont été données pour arriver à ce résultat.

    Ce qui donne ce résultat...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    {  "dates": [
        "2000",
        "2001",
        "2002",
        "2003"
      ],
      "publications": {
        "2000": {
          "C1_article1_1": {
            "titre": "titre1_1",
            "abstract": "blabla article1_1"
          },
          "C1_article1_2": {
            "titre": "titre1_2",
            "abstract": "blabla article1_2"
          }
        },
        "2001": {
          "C1_article2_1": {
            "titre": "titre2_1",
            "abstract": "blabla article2_1"
          },
          "C1_article2_3": {
            "titre": "titre2_3",
            "abstract": "blabla article2_3"
          },
          "C2_article1_1": {
            "titre": "titre1_1",
            "abstract": "blabla article1_1"
          },
          "C2_article1_2": {
            "titre": "titre1_2",
            "abstract": "blabla article1_2"
          }
        },
        "2002": {
          "C1_article3_2": {
            "titre": "titre3_2",
            "abstract": "blabla article3_2"
          },
          "C2_article2_1": {
            "titre": "titre2_1",
            "abstract": "blabla article2_1"
          }
        },
        "2003": {
          "C2_article3_2": {
            "titre": "titre3_2",
            "abstract": "blabla article3_2"
          }
        }
      },
      "syntheses": {
        "2000": {
          "nb_articles": 2,
          "Nip": 0.32
        },
        "2001": {
          "nb_articles": 2,
          "Nip": 0.32
        },
        "2002": {
          "nb_articles": 1,
          "Nip": 0.12
        },
        "2003": {
          "nb_articles": 1,
          "Nip": 0.12
        }
      }
    }
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Rebonjour fred1599,

    Merci pour le script, mais je ne pense pas que ça soit de mon niveau. Par conséquent j'ai plusieurs questions :

    1/Dans ta ligne 9 par exemple tu utilise une double itération avec key et value (je n'ai pas vue les double itérations, seulement les simples du type ) comment fonctionnent elles du coup ?

    2/Dans ta ligne 14 je ne comprend pas à quoi correspond 'value' qui est exprimé aussi dans l'itération

    3/Dans ta ligne 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if key == "dates" and key in result:
    result est un dico vide, mais pourquoi avoir verifier si 'key' y était sachant le dictionnaire vide ?

    4/Dernière question, à quoi sert ta fonction 'dumps' en ligne 25
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new_json = json.dumps(result, indent=2)
    Merci pour tes réponses et ton temps que tu me consacres :

    H.W.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    je ne pense pas que ça soit de mon niveau
    On en avait parlé sur un autre forum. Si tu n'as pas les bases pour comprendre une réponse à ta question, il faut les considérer comme un pré-requis avant de reprendre le code.

    Dans ta ligne 9 par exemple tu utilise une double itération avec key et value (je n'ai pas vue les double itérations
    Une double itération, c'est appliqué deux fois une simple itération. Quand on sait en faire une...

    à quoi correspond 'value' qui est exprimé aussi dans l'itération
    key : clé du dictionnaire
    value : valeur du dictionnaire

    result est un dico vide, mais pourquoi avoir verifier si 'key' y était sachant le dictionnaire vide ?
    au fur et à mesures des itérations, result se complète, il n'est donc vide qu'à la première itération.

    Dernière question, à quoi sert ta fonction 'dumps' en ligne 25
    On sérialise le dictionnaire dans le format JSON avec une indentation de 2 espaces, pour l'écrire dans le fichier JSON comme une simple chaîne de caractères.

    Tout ça se trouve dans les tutoriels, vraiment dans les bases. Le fait de jouer avec demande de l'entraînement, et tu en manques, alors il faut déjà commencer à travailler des petites parties de ce code ou d'autres, et voir ce qui se passe avec un print.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/10/2009, 12h16
  2. Réponses: 2
    Dernier message: 11/08/2009, 13h48
  3. Supprimer les éléments identiques d'un tableau
    Par kanzarih dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2009, 10h55
  4. Trouver les éléments identiques dans deux listes
    Par ricololo dans le forum MATLAB
    Réponses: 4
    Dernier message: 29/01/2009, 13h25
  5. Réponses: 2
    Dernier message: 11/08/2003, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo