Collections.defaultdict vs Regular Dict : Comprendre la distinction
Contrairement aux dictionnaires Python conventionnels qui génèrent une KeyError pour les clés manquantes, le defaultdict propose une tournure unique. Il initialise automatiquement les clés inexistantes avec des valeurs par défaut, déterminées par un objet « appelable » défini par l'utilisateur. Pour comprendre pleinement ses fonctionnalités, examinons sa syntaxe et ses mécanismes.
Dans le premier exemple fourni dans la question :
>>> from collections import defaultdict >>> s = 'mississippi' >>> d = defaultdict(int) >>> for k in s: ... d[k] += 1 ... >>> d.items() dict_items([('m', 1), ('i', 4), ('s', 4), ('p', 2)])
Nous utilisons un defaultdict et spécifions int comme objet appelable. Au fur et à mesure que nous parcourons la chaîne s, le defaultdict crée automatiquement les clés manquantes en appelant int(). Cette fonction renvoie un objet entier initialisé à 0. Par conséquent, chaque lettre de s devient une clé dans le dictionnaire résultant d, leurs valeurs correspondantes étant leurs fréquences d'occurrence.
Dans le deuxième exemple :
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] >>> d = defaultdict(list) >>> for k, v in s: ... d[k].append(v) ... >>> d.items() [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
Nous utilisons à nouveau un defaultdict et transmettons la liste comme objet appelable. Cette fois, les clés inexistantes sont initialisées à l'aide de list(). Au fur et à mesure que nous parcourons la liste des tuples, le defaultdict garantit que chaque couleur unique est représentée comme une clé. Les valeurs correspondantes sont des listes qui stockent les fréquences d'apparition de chaque couleur.
En utilisant un defaultdict, nous pouvons facilement utiliser des dictionnaires avec des clés manquantes, évitant ainsi les exceptions potentielles de KeyError et simplifiant notre code.
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!