L'ajout d'une nouvelle clé d'un imbriquée dictionnaire en python
J'ai besoin d'ajouter une clé avec une valeur qui augmente d'un pour chaque élément dans le sous-dictionnaire. J'ai essayé d'utiliser le dict['key']='value'
syntaxe, mais ne peut pas faire fonctionner un imbriquée dictionnaire. Je suis sûr que c'est très simple.
Mon Dictionnaire:
mydict={'a':{'result':[{'key1':'value1','key2':'value2'},
{'key1':'value3','key2':'value4'}]}}
C'est le code qui va ajouter la clé à la partie principale du dictionnaire:
for x in range(len(mydict)):
number = 1+x
str(number)
mydict[d'index']=number
print mydict
#out: {d'index':d'1',d'a'{d'result':[...]}}
Je veux ajouter la nouvelle clé et la valeur de la petite dictionnaires à l'intérieur de la place des parenthèses:
{'a':{'result':[{'key1':'value1',...,'index':'number'}]}}
Si j'ai essayer d'ajouter plus de couches à la dernière ligne de la for loop
j'obtiens cette erreur:
Traceback (most recent call last):
File "C:\Python27\program.py", line 34, in <module>
main()
File "C:\Python27\program.py", line 23, in main
mydict['a']['result']['index']=number
TypeError: list indices must be integers, not unicode
J'ai essayé différentes manières de répertorier les éléments imbriqués, mais pas de joie. Quelqu'un peut m'aider ici?
veuillez accepter mes excuses, j'avais ajouté supplémentaire accolades par erreur. Modifié maintenant, je vous remercie.
Super! Merci pour la correction.
Que diriez-vous un exemple de la sortie désirée?
Je l'ai ajouté au-dessus de la traçabilité en amont de code
OriginalL'auteur adohertyd | 2012-07-07
Vous devez vous connecter pour publier un commentaire.
Le problème est que
mydict
n'est pas simplement une collection de dictionnaires imbriqués. Il contient une liste. Rupture de la définition permet de préciser la structure interne:Afin d'accéder à la plus profonde des valeurs, ce que nous devons faire. Travailler à rebours:
retourne
resultdict
. Puis ceci:retourne
dictlist
. Puis ceci:renvoie le premier élément de
dictlist
. Enfin, ce:retourne
'value1'
Alors maintenant, vous avez juste à modifier votre
for
de la boucle pour parcourir correctement surmydict
. Il y a probablement de meilleures façons, mais voici une première approche:Notez que depuis l'objet qui vous intéresse dans une liste, les indices sont implicites. Je ne peux pas vraiment penser à une raison pourquoi vous devez ajouter une clé à chaque dict à l'intérieur avec un indice si vous connaissez déjà l'indice en fonction de la position dans la liste.
très bon point de Joel. Senderle seulement m'a fait prendre conscience de la liste dans un dictionnaire, donc n'avais pas pensé à ce scénario. Pour la plus grande image de mon programme de la
index
clé serait de garder les choses uniforme avec mes autres dictionnaires. Mais vous faites un excellent point deOriginalL'auteur senderle
Je ne suis pas entièrement sûr de ce que vous essayez de faire, mais je pense que
itertools.count
serait capable de l'aider ici.... et ainsi de suite.
En utilisant cela, vous pouvez garder l'incrémentation de la valeur que vous souhaitez utiliser dans votre
dict
sEspère que cette aide
Pourquoi à l'aide de itertools être une mauvaise idée?
J'ai lu quelque part que l'utilisation de itertools pour changer les touches (et non pas les valeurs) peut provoquer des erreurs d'exécution, et d'autres choses. J'ai peut-être confus mais, je suis encore en train de poignées avec Python!
Une idée où je peux trouver cela? Un lien peut-être?
C'est à partir de l'Python docs: docs.python.org/library/stdtypes.html#dict.iteritems se réfère uniquement à la
iteritems()
,iterkeys()
, etitervalues()
excuses, il semble queitertools
est okOriginalL'auteur inspectorG4dget