Question

J'ai une balise de chaîne de liste.

J'essaie d'initialiser un dictionnaire avec la clé comme chaîne de balise et les valeurs comme index de tableau.

for i, ithTag in enumerate(tag):
    tagDict.update(ithTag=i)

Ce qui précède me renvoie {'ithTag': 608} 608 est le 608ème index

Mon problème est que, même si le i est interprété comme une variable, Python traite le "ithTag". sous forme de chaîne au lieu d'une variable.

Je suis confus, il est difficile de chercher sur Google ce genre de questions spécifiques. J'espère avoir correctement libellé le titre de cette question,

Merci!

Était-ce utile?

La solution

Vous voulez réellement faire ceci:

for i, tag in enumerate(tag):
    tagDict[tag] = i

La méthode .update () est utilisée pour mettre à jour un dictionnaire en utilisant un autre dictionnaire, pas pour changer une paire paire clé / valeur.

Autres conseils

Si vous voulez être intelligent:

tagDict.update(map(reversed, enumerate(tag)))

Merci à Brian pour la mise à jour. C'est apparemment environ 5% plus rapide que la version itérative.

(EDIT: Merci, saverio, d'avoir souligné que ma réponse était incorrecte (maintenant corrigée). La manière la plus efficace / Pythonique serait probablement la réponse de Torsten Marek, légèrement modifiée:

tagDict.update((t, i) for (i,t) in enumerate(tag))

)

C'est un one-liner:

tagDict = dict((t, i) for i, t in enumerate(tag))

Je pense que c'est ce que vous voulez faire:

d = {}
for i, tag in enumerate(ithTag):
   d[tag] = i

Essayez

tagDict[ithTag] = i

Je pense que ce que vous voulez, c'est ceci:

for i, ithTag in enumerate(tag):
    tagDict.update({ithTag: i})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top