Python Générer un dictionnaire dynamique dans la liste des clés
J'ai une liste donnée ci-dessous -
keyList1 = ["Person", "Male", "Boy", "Student", "id_123", "Name"]
value1 = "Roger"
Comment puis-je générer dictionnaire dynamique qui peut être récupéré comme ci-dessous -
mydict["Person"]["Male"]["Boy"]["Student"]["id_123"]["Name"] = value
La liste pourrait être n'importe quoi; ou de Longueur Variable, composé de "N" nombre d'éléments inconnus pour moi...
Maintenant j'ai une autre liste, de sorte que Mon dictionnaire doit être mis à jour en conséquence
keyList2 = ["Person", "Male", "Boy", "Student", "id_123", "Age"]
value2 = 25
c'est à dire Si les Touches "Personne", "Male", "Garçon", "Étudiant", "id_123" existe déjà, la nouvelle clé de "l'âge" doit être ajouté ...
Je suggère d'ajouter tous les éléments de la liste et d'utiliser la chaîne résultante en tant que clé. Il serait beaucoup plus facile.
Les réponses à cette question peut aider: stackoverflow.com/questions/16384174/...
Les réponses à cette question peut aider: stackoverflow.com/questions/16384174/...
OriginalL'auteur Abhishek Kulkarni | 2013-07-04
Vous devez vous connecter pour publier un commentaire.
Je suis en train d'apprendre python, donc mon code est peut être pas très pythonic, mais voici mon code
.has_key
chaque fois que possible; préférez le plus rapide et plus compréhensibleif list[0] not in cur
.merci, je suis d'accord que c'est plus lisible et la lisibilité des comptes, mais pourquoi c'est plus rapide?
Essayez à l'aide de
timeit
. Sur mon ordinateur,in
est deux fois plus rapide que.has_key
(0.0672 µs vs 0.117 µs)..has_key
est une méthode de recherche, alors quein
est un builtin qui est distribuée beaucoup plus rapide..has_key
est obsolète et n'existe pas dans Python3OriginalL'auteur Roman Pekar
Vous pouvez le faire en faisant imbriquée
defaultdict
s:Cela a l'avantage agréable d'être capable d'écrire
sans nécessairement avoir à utiliser le
setpath
helper.Vous pouvez le faire sans récursive
defaultdict
s:OriginalL'auteur nneonneo
Vous pourriez peut-être sous-classe dict:
OriginalL'auteur Rao
Créer votre propre classe dérivée de l'dict où la init méthode prend une liste et une seule valeur en tant qu'entrées et parcourir la liste définissant les clés de la valeur, de définir une méthode de mise à jour qui prend une liste et une nouvelle valeur, et pour chaque élément qui n'est pas déjà un jeu de clé à la nouvelle valeur (en supposant que c'est ce dont vous avez besoin).
Oublier l'idée de
comme il est source de confusion avec subindexes.
OriginalL'auteur Steve Barnes
Je suis en train de faire face à des choses, si je peux vous suggérer quelques lignes directrices, mais encore une fois je suis naïf en Python, donc c'est juste une ligne directrice...
vous avez une liste de clés
de sorte que vous pouvez certainement commencer avec une boucle d'itération pour chaque valeur, puis affectez la valeur
comme
en faire quelque chose, vous devez incrémenter i et l'indice de changement de [i][i+1], puis suivez les mêmes jusqu'à i+n = len(keylist)
OriginalL'auteur Shruti Joshi
Utilisation
tuple(keyList1)
en tant que clé. (les tuples sont immuables et ne peut donc être dict touches).Vous aurez un monde de mal de tête avec le imbriquée dict approche. (boucles imbriquées pour l'énumération, de l'héritage de données lors de la hiérarchie des besoins de changement, etc.).
Sur une seconde pensée, peut-être, vous devez définir une classe de personne
puis utiliser une liste de toutes les personnes et filtre avec, par exemple,
... pour <= 10000 étudiants, vous devez être bien performancewise.
OriginalL'auteur Torben Klein
Vous pouvez aussi le faire en une seule étape, comme ce
er.. d'où
reduce(lambda x, y: x.setdefault(y, {}), keyList1, mydict)
dépendent du nombre d'éléments ou de les touches spécifiques?OriginalL'auteur John La Rooy