Comment peut-on créer un defaultdict imbriqué à l'infini ? En d’autres termes, est-il possible de définir la valeur par défaut d’un defaultdict sur un autre defaultdict ? Cela permettrait des structures imbriquées de profondeur arbitraire qui créent automatiquement les dictionnaires nécessaires selon les besoins.
Par exemple, considérons le code suivant :
x = defaultdict(...stuff...) x[0][1][0] {}
Dans ce scénario, x[0] serait un defaultdict, x[0][1] serait un autre defaultdict, et x[0][1][0] serait un standard dictionnaire.
Bien qu'il soit possible de créer un defaultdict qui contient d'autres defaultdicts, il n'est pas directement pris en charge par les arguments standard defaultdict. Cependant, il existe une solution de contournement simple qui permet des dicts par défaut imbriqués à plusieurs niveaux.
Au lieu de définir la valeur par défaut comme un autre dict par défaut, définissez la valeur par défaut comme une fonction lambda qui renvoie un dict par défaut :
x = defaultdict(lambda: defaultdict(dict))
Ce code crée un defaultdict à deux niveaux, où x[0] est un defaultdict et x[0][1] est un autre defaultdict, les valeurs étant dictionnaires.
Pour une imbrication de niveaux infinis, ajoutez simplement des niveaux supplémentaires à la fonction lambda :
x = defaultdict(lambda: defaultdict(lambda: defaultdict(...)))
Cette solution de contournement permet la création de dicts par défaut arbitrairement imbriqués, offrant un moyen pratique de gérer des données complexes structures à création de valeur automatique.
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!