Maison  >  Article  >  développement back-end  >  Comment puis-je regrouper les données par clés en Python et renvoyer le résultat dans un format spécifique, en gérant efficacement les données avec des clés répétitives et en maintenant l'ordre ?

Comment puis-je regrouper les données par clés en Python et renvoyer le résultat dans un format spécifique, en gérant efficacement les données avec des clés répétitives et en maintenant l'ordre ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 14:08:30847parcourir

How can I group data by keys in Python and return the result in a specific format, effectively handling data with repeating keys and maintaining order?

Regroupement de données Python par clés

Ce guide aborde la tâche de regroupement des données par clés spécifiques en Python. Notre objectif est de parvenir à une solution de regroupement efficace et ordonnée pour l'ensemble de données donné.

Énoncé du problème

Considérez l'ensemble de données suivant représenté sous forme de paires clé-valeur :

<code class="python">input = [
          ('11013331', 'KAT'), 
          ('9085267',  'NOT'), 
          ('5238761',  'ETH'), 
          ('5349618',  'ETH'), 
          ('11788544', 'NOT'), 
          ('962142',   'ETH'), 
          ('7795297',  'ETH'), 
          ('7341464',  'ETH'), 
          ('9843236',  'KAT'), 
          ('5594916',  'ETH'), 
          ('1550003',  'ETH')
        ]</code>

Le but est de regrouper ces paires de données par leurs clés correspondantes (le deuxième élément de chaque tuple) et de renvoyer le résultat groupé au format suivant :

<code class="python">result = [ 
           { 
             'type': 'KAT', 
             'items': ['11013331', '9843236'] 
           },
           {
             'type': 'NOT', 
             'items': ['9085267', '11788544'] 
           },
           {
             'type': 'ETH', 
             'items': ['5238761', '962142', '7795297', '7341464', '5594916', '1550003'] 
           }
         ] </code>

Solution

Voici les étapes pour regrouper efficacement les données :

  1. Créer un dictionnaire : Utilisez un dictionnaire par défaut pour stocker les éléments de chaque clé. Initialisez le dictionnaire avec une usine par défaut qui crée une liste vide pour chaque nouvelle clé.

    <code class="python">from collections import defaultdict
    
    res = defaultdict(list)
    for v, k in input:
     res[k].append(v)</code>
  2. Convertissez le dictionnaire au format attendu : Pour générer le dictionnaire final Résultat, convertissez le dictionnaire en une liste de dictionnaires avec la structure souhaitée.

    <code class="python">result = [{'type': k, 'items': v} for k, v in res.items()]</code>

Remarques facultatives :

  • Avant Python 3.7, les dictionnaires ne maintenaient pas l'ordre d'insertion. Pour conserver l'ordre d'origine des clés, envisagez plutôt d'utiliser un OrderedDict.
  • Alternativement, la fonction itertools.groupby peut également être utilisée pour le regroupement, mais elle nécessite que l'entrée soit triée au préalable.
  • Pour les grands ensembles de données, l'utilisation d'une base de données avec une fonction de regroupement peut être plus efficace que les solutions en mémoire présentées ici.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn