python - 如何为一个dict字典进行多层级赋值?
ringa_lee
ringa_lee 2017-04-18 10:07:26
0
2
1533
ringa_lee
ringa_lee

ringa_lee

répondre à tous(2)
大家讲道理

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

洪涛

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal