Recuperando valores de diccionarios.

Víctor Peinado victor en lsi.uned.es
Mie Jun 30 16:33:52 CEST 2004


¡Hola a todos!

Llevo un par de horas parado dando vueltas a una cosa. Espero que se entienda, 
voy pasito a paso:

Tengo definido un diccionario, por ejemplo:
>>> a = {1: "uno", 2: "dos", 3: "tres", 1234: "mucho"}
>>> a
{1: 'uno', 2: 'dos', 3: 'tres', 1234: 'mucho'}

Defino una determinada expresión regular para capturar dígitos tras cualquier 
palabra a la que pongo como nombre "num".
>>> import re
>>> regex = re.compile(r"\w+ (?P<num>\d+) ")

Y compruebo que funciona con esta cadena, por ejemplo:
>>> m = regex.search("esta 1234 cadena tiene números")
>>> print m.group('num')
1234

Muy bien, pues me gustaría recuperar el valor asociado a m.group('num') en el 
diccionario a, pero soy incapaz. Probamos:
>>> print a[m.group('num')]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
KeyError: '1234'

Usando el método de diccionario get(), obtengo un resultado curiso:
>>> print a.get(m.group('num'))
None

Y estoy seguro de que el valor "capturado" en m.group('num') existe en mi 
diccionario
>>> print a[1234]
mucho
>>> a.has_key(1234)
True

Peeero, si fuerzo que lo busque la clave como cadena (que es lo que parece que 
hace en los ejemplos de arriba), no funciona.
>>> a.has_key('1234')
False

Así que empiezo a intuir un poco a qué se debe el error, aunque no estoy 
seguro. Tendría que transformar las claves del diccionario a cadenas (aunque 
son dígitos) o al revés, ¿no? Por ejemplo:

>>> print a.get(int(m.group('num')))
mucho

Se debe a esto el error o tiene una explicación más compleja. ¿Es ésta la 
única forma de arreglar este problema? Saludos.

PD.: Lo siento pero sigo pecando de perlero, pensando que cadenas y dígitos 
son (casi) lo mismo. Perdonad por el rollo que os acabo de meter. 

-- 
Res publica non dominetur. 
 
 Víctor Peinado || NLP Group - UNED || http://nlp.uned.es
 Fingerprint: C0D5 22EA 607C 47F9 28D7 3FFB 1CE0 342F 1285 66CA
 <victor.peinado />


------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es