HOWTO · Python

Comment obtenir des valeurs uniques à partir d'une liste en Python

L'article présente des méthodes pour obtenir des valeurs uniques à partir d'une liste en Python

Sur cette page

Pour obtenir des valeurs uniques à partir d’une liste Python avec Python 3.7 ou une version ultérieure, utilisez list(dict.fromkeys(values)) si les éléments sont hachables et que vous souhaitez conserver l’ordre de leur première apparition. Si les éléments ne sont pas hachables, utilisez une boucle qui construit une liste de résultats. Convertissez la liste en set(values) uniquement si l’ordre n’a pas d’importance.

Obtenir des valeurs uniques dans l’ordre avec dict.fromkeys()

dict.fromkeys() crée un dictionnaire dont les clés proviennent de l’itérable d’entrée. Les clés d’un dictionnaire sont uniques et, depuis Python 3.7, leur ordre d’insertion est préservé. Reconstruire une liste à partir des clés supprime donc les doublons tout en conservant la première position de chaque valeur. Cette méthode exige que tous les éléments soient hachables, comme c’est généralement le cas pour les clés d’un dictionnaire.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = list(dict.fromkeys(values))
print(unique_values)

Résultat :

['pear', 'apple', 'plum']

Obtenir des valeurs uniques dans l’ordre avec une boucle

Les valeurs non hachables, comme les listes imbriquées, ne peuvent pas servir de clés de dictionnaire ni d’éléments d’un ensemble. Une boucle explicite peut à la place comparer chaque valeur à celles déjà collectées. Elle conserve la première occurrence et convient aux listes de valeurs dont les comparaisons d’égalité ont un sens.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

values = [[1, 2], [3, 4], [1, 2]]
unique_values = []
for value in values:
    if value not in unique_values:
        unique_values.append(value)
print(unique_values)

Chaque vérification value not in unique_values parcourt la liste de résultats. À mesure que le nombre d’éléments distincts augmente, ces comparaisons répétées peuvent rendre cette approche plus lente que les méthodes fondées sur le hachage. Utilisez-la lorsque la prise en charge des éléments non hachables compte davantage que la vitesse.

Obtenir des valeurs uniques avec set() lorsque l’ordre n’a pas d’importance

Pour des éléments hachables, set(values) supprime les doublons en peu de code. Un ensemble ne préserve pas l’ordre de la liste d’entrée ; ne comptez donc pas sur une séquence particulière lorsque vous le reconvertissez en liste. Les éléments d’un ensemble doivent également être hachables. Choisissez cette option si l’ordre est sans importance, par exemple pour vérifier l’appartenance ou comparer les valeurs présentes.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = set(values)
print(unique_values)

L’ordre affiché de l’ensemble peut varier : le résultat contient les valeurs distinctes, mais aucun ordre d’affichage particulier n’est garanti.

Choisir une méthode pour votre liste

Choisissez dict.fromkeys() pour obtenir simplement une liste de résultats qui conserve la première occurrence de chaque valeur hachable. Choisissez la boucle explicite si les valeurs peuvent être non hachables, comme les listes, et que l’ordre de première apparition doit être conservé. Choisissez set() si les valeurs sont hachables et que leur ordre n’a pas d’importance.

Avec des entrées hachables, les recherches d’appartenance dans un dictionnaire ou un ensemble sont généralement efficaces en moyenne, tandis que la boucle parcourt à répétition la liste de résultats qui s’allonge. Ces méthodes déterminent les doublons selon les règles d’égalité et de hachage de Python : des valeurs égales, comme 1 et True, sont considérées comme égales et fusionnent en une seule entrée. Si votre application a besoin d’une autre définition de l’unicité, normalisez chaque élément ou calculez-en d’abord une clé, puis éliminez les doublons à partir de cette clé.