Maison >développement back-end >Tutoriel Python >Comment puis-je supprimer les dictionnaires en double d'une liste Python tout en préservant ou en ignorant l'ordre ?

Comment puis-je supprimer les dictionnaires en double d'une liste Python tout en préservant ou en ignorant l'ordre ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-28 00:21:10245parcourir

How Can I Remove Duplicate Dictionaries from a Python List While Preserving or Ignoring Order?

Suppression des dictionnaires en double d'une liste en Python

Étant donné une liste de dictionnaires, l'objectif est de supprimer tous les dictionnaires qui partagent une clé identique. paires de valeurs. Par exemple, transformer la liste [{'a' : 123}, {'b' : 123}, {'a' : 123}] en [{'a' : 123}, {'b' : 123}] atteindre cet objectif.

Pour y parvenir, vous pouvez utiliser une technique simple mais puissante :

[dict(t) for t in {tuple(d.items()) for d in l}]

Cette approche fonctionne dans trois domaines distincts étapes :

  1. Convertissez chaque dictionnaire en un tuple, où le tuple stocke les paires clé-valeur du dictionnaire.
  2. Transformez la liste des tuples en un ensemble, en supprimant efficacement les doublons puisque les ensembles ne peuvent pas contenir plusieurs instances de la même valeur.
  3. Reconstruisez les dictionnaires à partir des tuples à l'aide de dict() fonction.

Les variables dans l'extrait de code représentent les éléments suivants :

  • l : La liste originale des dictionnaires
  • d : Un dictionnaire individuel au sein de la list
  • t : un tuple représentant les paires clé-valeur de ce dictionnaire

Si vous conservez l'original l'ordre des dictionnaires est crucial, vous pouvez utiliser l'approche modifiée suivante :

seen = set()
new_l = []
for d in l:
    t = tuple(d.items())
    if t not in seen:
        seen.add(t)
        new_l.append(d)

Ce code intègre une étape supplémentaire de maintenance d'un ensemble vu pour suivre quels tuples (et donc dictionnaires) ont déjà été rencontrés. Si un tuple n'est pas trouvé dans l'ensemble vu, il est ajouté à l'ensemble et le dictionnaire correspondant est ajouté à la liste new_l.

Il est important de noter que la comparaison directe des dictionnaires en utilisant l'égalité (==) peut ne pas toujours produire le résultat souhaité si les dictionnaires ont été modifiés de différentes manières. Si l'ordre des paires clé-valeur est important, il est recommandé de trier les éléments du dictionnaire avant de créer le tuple.

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