Maison > développement back-end > Tutoriel Python > Voici un titre approprié pour votre article, en gardant à l'esprit le format de la question : Comment regrouper des paires de données par type en Python : solutions efficaces avec « defaultdict » et « itertools.groupby »

Voici un titre approprié pour votre article, en gardant à l'esprit le format de la question : Comment regrouper des paires de données par type en Python : solutions efficaces avec « defaultdict » et « itertools.groupby »

Linda Hamilton
Libérer: 2024-10-27 07:06:03
original
868 Les gens l'ont consulté

Here's a suitable title for your article, keeping the question format in mind: 

How to Group Data Pairs by Type in Python: Efficient Solutions with `defaultdict` and `itertools.groupby`

Python Group By

Problème :

Étant donné un ensemble de paires de données où le premier élément est la valeur et le le deuxième élément est le type, regroupez-les en fonction du type.

Exemple :

input = [
  ('11013331', 'KAT'),
  ('9085267', 'NOT'),
  ('5238761', 'ETH'),
  ('5349618', 'ETH'),
  ('11788544', 'NOT'),
  ('962142', 'ETH'),
  ('7795297', 'ETH'),
  ('7341464', 'ETH'),
  ('9843236', 'KAT'),
  ('5594916', 'ETH'),
  ('1550003', 'ETH'),
]
Copier après la connexion

Résultat souhaité :

result = [
  {
    'type': 'KAT',
    'items': ['11013331', '9843236']
  },
  {
    'type': 'NOT',
    'items': ['9085267', '11788544']
  },
  {
    'type': 'ETH',
    'items': ['5238761', '962142', '7795297', '7341464', '5594916', '1550003']
  },
]
Copier après la connexion

Solution :

Étape 1 : Créer un dictionnaire

  • Utilisez le collections.defaultdict pour créer un dictionnaire où les clés sont des types d'éléments et les valeurs sont des listes pour stocker des valeurs.
  • Pour chaque paire de données, ajoutez la valeur à la liste correspondant à son type.

Étape 2 : Convertir en Format attendu

  • Convertissez le dictionnaire au format attendu en itérant sur ses éléments et en créant des dictionnaires avec les clés « type » et « éléments ».

Exemple de code :

<code class="python">from collections import defaultdict

res = defaultdict(list)
for v, k in input:
    res[k].append(v)

output = [{'type': k, 'items': v} for k, v in res.items()]</code>
Copier après la connexion

Solution alternative utilisant itertools.groupby :

Remarque :Cette approche nécessite que l'entrée soit triés.

  • Triez les paires de données en fonction de leurs types.
  • Utilisez itertools.groupby pour regrouper les paires de données par type.
  • Parcourez les éléments groupés pour créer le format de sortie souhaité.

Exemple de code :

<code class="python">from itertools import groupby, itemgetter

sorted_input = sorted(input, key=itemgetter(1))

groups = groupby(sorted_input, key=itemgetter(1))
output = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
Copier après la connexion

Remarque sur la commande des clés :

  • Dans les versions Python antérieures à 3.7, l'ordre d'insertion n'est pas garanti pour les dictionnaires. Pour que l'ordre reste cohérent avec l'entrée, utilisez collections.OrderedDict.
  • Dans Python 3.7 et versions ultérieures, les dictionnaires conservent l'ordre d'insertion par défaut.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal