Maison > Article > développement back-end > 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 »
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'), ]
Résultat souhaité :
result = [ { 'type': 'KAT', 'items': ['11013331', '9843236'] }, { 'type': 'NOT', 'items': ['9085267', '11788544'] }, { 'type': 'ETH', 'items': ['5238761', '962142', '7795297', '7341464', '5594916', '1550003'] }, ]
Solution :
Étape 1 : Créer un dictionnaire
Étape 2 : Convertir en Format attendu
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>
Solution alternative utilisant itertools.groupby :
Remarque :Cette approche nécessite que l'entrée soit triés.
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>
Remarque sur la commande des clés :
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!