Maison  >  Article  >  développement back-end  >  Comment puis-je filtrer efficacement les dictionnaires en fonction de conditions personnalisées en Python ?

Comment puis-je filtrer efficacement les dictionnaires en fonction de conditions personnalisées en Python ?

DDD
DDDoriginal
2024-11-11 12:20:02731parcourir

How can I efficiently filter dictionaries based on custom conditions in Python?

Filtrage de dictionnaire avancé avec des conditions personnalisées

L'exemple du livre illustre le filtrage de dictionnaire à l'aide de la fonction items(), un processus qui peut être rationalisé pour efficacité.

Méthode de compréhension de dict :

Python propose un outil puissant à cet effet : la compréhension de dict. Avec lui, vous pouvez créer un nouveau dictionnaire basé sur des valeurs existantes tout en appliquant des conditions personnalisées. Par exemple, pour filtrer un dictionnaire de points :

points = {'a': (3, 4), 'b': (1, 2), 'c': (5, 5), 'd': (3, 3)}

points_under_5 = {
    k: v
    for k, v in points.items()  # Iterate over (key, value) pairs
    if v[0] < 5 and v[1] < 5  # Filter based on condition
}

Compatibilité Python 2 :

Dans Python 2 (à partir de la version 2.7), la syntaxe d'itération sur les éléments du dictionnaire est légèrement différent :

points_under_5 = {
    k: v
    for k, v in points.iteritems()  # Use 'iteritems()' instead of 'items()'
    if v[0] < 5 and v[1] < 5
}

Considérations relatives aux performances :

L'approche de compréhension de dict offre des performances supérieures par rapport à la méthode d'itération manuelle :

import timeit

# Manual iteration
manual_time = timeit.timeit(
    """
points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}
points_small={}
for item in [i for i in points.items() if i[1][0]<5 and i[1][1]<5]:
    points_small[item[0]]=item[1]
""", number=1000000
)

# Dict comprehension
dict_time = timeit.timeit(
    """
points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}
points_under_5 = {k:v for k, v in points.items() if v[0]<5 and v[1]<5}
""", number=1000000
)

print("Manual iteration time:", manual_time)
print("Dict comprehension time:", dict_time)

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