En Python, j'ai besoin de générer un dict
qui mappe une lettre sur une représentation prédéfinie "one-hot" de cette lettre. A titre d'illustration, le dict
devrait ressembler à ceci:Génération d'une représentation sous forme de chaîne d'un codage mono-codage
{ 'A': '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0',
'B': '0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0', # ...
}
Il y a un bit (représenté comme un caractère) par lettre de l'alphabet. Par conséquent, chaque chaîne contiendra 25 zéros et un 1. La position du 1
est déterminée par la position de la lettre correspondante dans l'alphabet.
je suis venu avec un code qui génère ceci:
# Character set is explicitly specified for fine grained control
_letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
n = len(_letters)
one_hot = [' '.join(['0']*a + ['1'] + ['0']*b)
for a, b in zip(range(n), range(n-1, -1, -1))]
outputs = dict(zip(_letters, one_hot))
est-il un moyen plus efficace/propre/plus pythonique à faire la même chose?
Très lisible. +1 –
Nice. Je pense que j'ai essayé une tentative laide de programmation fonctionnelle. Votre version est beaucoup plus lisible cependant. –
L'utilisation de 'ascii_uppercase' est une bonne idée (je ne savais même pas qu'il existait.), Mais je ne suis pas sûr que ce soit plus lisible que le code original. La compréhension de la liste est laconique, mais elle est aussi très expressive. L'utilisation d'une boucle explicite rend le but du code moins clair à mes yeux. – bcat