Maison  >  Questions et réponses  >  le corps du texte

python - 如何为一个dict字典进行多层级赋值?

ringa_leeringa_lee2740 Il y a quelques jours1470

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-04-18 10:09:26

    Vous pouvez mettre en œuvre cette structure vous-même.
    Dans l'exemple suivant, AutoVivification hérite de dict

    class AutoVivification(dict):
        """Implementation of perl's autovivification feature."""
        def __getitem__(self, item):
            try:
                return dict.__getitem__(self, item)
            except KeyError:
                value = self[item] = type(self)()
                return value
                

    Nous pouvons utiliser l'AutoVivification comme ceci :

    item = AutoVivification()
    item['20161101']["age"] = 20
    item['20161102']['num'] = 30
    print item
    

    Sortie :

    {'20161101': {'age': 20}, '20161102': {'num': 30}}
    

    De plus, il existe une autre méthode d'implémentation d'AutoVivification, qui consiste à surcharger directement la __missing__ méthode magique de dict. Considérez-le comme une extension.

    class AutoVivification(dict):
        """Implementation of perl's autovivification feature."""
        def __missing__(self, key):
            value = self[key] = type(self)()
            return value
            

    Encore une chose, les versions après Python 2.5 ont ajouté le type collections.defaultdict, qui peut personnaliser un type de dict plus évolutif. Le document
    souligne que le principe de mise en œuvre est de surcharger la méthode __missing__. L'AutoVivification peut aussi s'exprimer ainsi :

    item = defaultdict(dict)  # 其实现与AutoVivification的实现完全一样
    item['20161101']["age"] = 20
    item['20161102']['num'] = 30
    print item
    

    defaultdict construit un type dict dont le premier paramètre est son default_factory Lorsque __missing__ est appelé, la valeur de retour est construite en utilisant default_factory.
    Plus d'exemples de defaultdict

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:09:26

    Je joindrai l'utilisation du package defaultdict :

    from collections import defaultdict
    
    item = defaultdict(dict)
    item['20161101']['age'] = 20
    print item

    Sortie :

    defaultdict(<type 'dict'>, {'20161101': {'age': 20}})

    De cette façon, vous pouvez obtenir l'effet souhaité,

    Supplément :
    defaultdict() reçoit un paramètre par défaut, qui peut être un nom de type ou n'importe quelle fonction appelable sans paramètres
    C'est très utile

    item = defaultdict(lambda:0)
    print item['num']

    Sortie :

    0

    répondre
    0
  • Annulerrépondre