Tout neuf à Python, disons que j'ai un dict: si Child3 change de couleur de cheveux régulièrement, je voudrais peut-être écrire une application pour accélérer la maintenance des données. Dans cet exemple, j'utiliserais: p> kidshair['allkids']['child3']['hair'] = 'blue'
5 Réponses :
Selon ce dont vous avez besoin, l'option la plus simple peut être d'utiliser des tuples comme des touches de dictionnaire au lieu de dictionnaires imbriqués:
def dictsetter(item, name):
def f(value):
item[name] = value
return f
mypath = dictsetter(test["a"]["b"], "c")
mypath(2)
Brillamment décrit, m'a permis de résoudre plus que de résoudre mon problème. Sincères remerciements.
Le plus proche que vous puissiez faire avec votre structure de données actuelle consiste à obtenir le dernier dict et à l'utiliser directement:
name[key] = value
Vous pouvez enregistrer une référence à Vous ne pouvez pas enregistrer tout le chemin, car L'affectation change la touche code> code> dans le kidshair ['allkids'] ['enfant3'] code> facilement: kidshair ['Allkids'] ['Child3'] Code> Dictionnaire.
Si vous voulez changer un dictionnaire, vous devez y avoir une référence, non pas à quelque chose qu'il contient. P> p>
Vous pouvez créer un ensemble de fonctions qui accède à un "chemin" pour un dictionnaire donné: utilisation: p>
En rétrospectivement, il est probablement plus facile de passer des tuples au «chemin» au lieu de rejoindre et de fractionnement des chaînes.
J'ai fini par créer de code similaire avant de trouver cette question. Cependant, comme vous l'avez suggéré, j'ai créé des fonctions acceptées des tuples, ainsi que deux fonctions d'assistance acceptées des chaînes et appelées les fonctions de chemin avec appel à Split () comme argument de tuple.
Vérifiez votre mise en forme.
Kidshair code> générera une erreur de syntaxe telle qu'elle est maintenant.Ceci est associé: Stackoverflow.com/Questtions/3797957/... (Bien que ce ne soit pas exactement ce que vous demandez)
@AtheistForpaytheist: Cela ne fonctionnera toujours pas. «Child1», «Child2» et «Child3» devraient tous être dans un dictionnaire.
@Joelcorntt. Oh Lawd, vous pouvez dire que je suis nouveau à cela! Je pense que je l'ai maintenant.
@AtheistForpaytheist: Oui. Tu l'as eu. :)
Vous pouvez également envisager cette réponse Stackoverflow.com/a/3798595/255008 avec code pour créer un "dictionnaire de points".