Mise en forme de chaîne [str.format()] avec une clé de dictionnaire qui est un str() d'un certain nombre
Python néophyte ici. Je me demandais si quelqu'un pouvait m'aider avec le KeyError
je suis arriver lors de l'utilisation d'un dictionnaire de la chaîne d'interpolation dans str.format
.
dictionary = {'key1': 'val1', '1': 'val2'}
string1 = 'Interpolating {0[key1]}'.format(dictionary)
print string1
Ci-dessus fonctionne très bien et les rendements:
Interpolating val1
Cependant procédant de la manière suivante:
dictionary = {'key1': 'val1', '1': 'val2'}
string2 = 'Interpolating {0[1]}'.format(dictionary)
print string2
résultats dans:
Traceback (most recent call last):
File "test.py", line 3, in <module>
string2 = 'Interpolating {0[1]}'.format(dictionary)
KeyError: 1L
Donc le problème semble être dans l'interprétation de la touche numérique comme un indice de la liste, à mon humble avis. Est-il possible de contourner ce problème? (c'est à dire transmettre que c'est plutôt une clé de dictionnaire)
TIA et toutes mes excuses si cette question a été posée avant(ne pouvait pas trouver quelque chose de pertinent à ma recherche-fu).
Edit 1: La clé n'est pas numérique, comme il a été erronément indiqué, plus tôt. C'est plutôt une représentation de chaîne d'un nombre - comme l'a souligné BrenBarn.
string2 = 'Interpolating {}'.format(dictionary['1'])
?La manière habituelle d'utiliser le format serait
'Interpolating {key1}'.format(**dictionary)
kobejohn: Dans le contexte, je suis en utilisant cette interpolation, il est opportun de le faire, comme mentionné dans la question. Depuis que je suis ensuite l'utiliser pour accéder à un attribut(c'est à dire quelque chose comme
'{0[1].some_attr}'.format({'1' : someobj})
Juste pour s'assurer que les choses sont claires, comme BrenBarn noté votre exemple ne pas utiliser sur une touche numérique. Il utilise la chaîne
'1'
comme la clé. Vous devrez changer votre dict {1: someobj}.kobejohn: Vrai. J'ai mis à jour la question/description. Encore solliciter des solutions de contournement pour la chaîne-de la représentation-de-chiffres-clés-en-interpolation-dictionnaires problème(le cas échéant).
OriginalL'auteur decimus phostle | 2012-06-21
Vous devez vous connecter pour publier un commentaire.
Pas. Selon la documentation:
De sorte que vous ne pouvez pas utiliser des chaînes de composé de numéros de clés de dictionnaire dans les chaînes de format.
Noter que votre clé n'est pas numérique, et il n'est pas d'essayer de l'utiliser comme un indice de la liste. Votre clé est une chaîne qui contient un chiffre. Ce qu'elle essaie de faire est d'utiliser le nombre 1 (pas la chaîne "1") en tant que clé de dictionnaire. Cela ne fonctionne pas si vous utilisez le numéro 1 de votre clé de dictionnaire (c'est à dire, faire de votre dict
{'key1': 'val1', 1: 'val2'}
).J'avais lu ce bit de la documentation et de la PEP avant de poster. Cependant, je me demandais si le Python gourous avait des conseils/suggestions/solutions de contournement. Ne le pense pas. Aussi, vous avez raison, la clé est une chaîne et non pas numérique. Duh!
OriginalL'auteur
Je pense que ce que vous cherchez est:
OriginalL'auteur
Vous avez raison, l'analyseur n'est pas complexe, et ne peut pas manipuler la variable d'indices pour les dictionnaires. Votre travail est:
OriginalL'auteur
Si votre dictionnaire les clés sont des chaînes de caractères, une solution possible est de convertir votre dictionnaire à une classe:
OriginalL'auteur