[pyar] Seleccionar valores de un diccionario de tuplas

SAn gringotumadre en gmail.com
Mie Sep 15 09:10:57 ART 2010


2010/9/15 Daniel Moisset <dmoisset en machinalis.com>:
> 2010/9/15 Alejandro Alcalde <algui91 en gmail.com>:
>> Hola, Tengo un problema en el que llevo pensando como resolver desde hace 2
>> dias, y no le encuentro solucion, y me decidi a preguntarle a ustedes a ver
>> si pueden ayudarme.
>>
>> Bueno, el caso es que tengo lo siguiente:
>>
>> niveles =
>> ("1(A1)","2(A1)","3(A2)","4(A2)","5(B1)","6(B1)","1-1","1-2","2-1","2-2",">3")
>>
>>     temas = { niveles[0] : ("1","2","3","4","5","6","7"),
>>               niveles[1] : ("8","9","10","11","12","13","14"),
>>               niveles[2] : ("15","16","17","18","19","20","21"),
>>               niveles[3] : ("22","23","24","25","26","27","28"),
>>               niveles[4] : ("29","30","31","32","33","34","35"),
>>               niveles[5] : ("36","37","38","39","40","41","42"),
>>               niveles[6] : ("43","44","45","46"),
>>               niveles[7] : ("47","48","49","50"),
>>               niveles[8] : ("51","52","53","54"),
>>               niveles[9] : ("55","56","57","58"),
>>               niveles[10] :
>> ("59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74",)}
>>
>> Bien, pues mi problemas es, que en otro lugar, tengo una variable que
>> almacena un valor de temas, por ejemplo el 1, que esta e niveles[0].
>> El caso es que nose de que manera puedo obtener, a partir de ese 1, el valor
>> de niveles[0], niveles[1], o el que sea, dependiendo del numero.
>> Para el caso del 1, deberia obtener 1(A1), es decir, el valor de niveles[0].
>
> no hay una froma muy directa por como organizaste tus datos...
> esencialmente tenes que iterar:
>
> def obtener_nivel(tema):
>    for n, ts in temas.iteritems():
>        if tema in ts: return n
>
> con eso, obtener_nivel(1) te va a dar "1(A1)". No se cuan seguido lo
> haces y cuan grande es tu tabla real. Si esos son tus datos reales, y
> la busqueda la haces 1 vez por segundo, o cada mas tiempo, seguramente
> no calienta tener que iterar. Si estas haciendo esto en un lugar donde
> la performance importa seguramente te conviene tener una estructura de
> datos mas interesante que te permita agilizar la busqueda.

Sí, por ejemplo usar un diccionario bidireccional para temas:
http://pypi.python.org/pypi/bidict/0.1.1
No tendrias que cambiar el código, pero bueno te sirve solo si las
claves y valores no se chocan.



More information about the pyar mailing list