2012-03-21 15 views
5

Descargo de responsabilidad: Sí. Me doy cuenta de que lo que sugiero es una locura, tengo un caso de uso muy especial (ab).¿Hay alguna forma de que los dict literales de python se evalúen como dictados ordenados?

Dentro de un ejecutivo en particular, quiero literales de diccionario para evaluar a los diccionarios ordenados, por lo que puedo conservar el orden original desde el código ejecutado.

He intentado reemplazar __builtin____ dict antes del ejecutivo (teniendo mucho cuidado de restaurarlo después), sin embargo, eso no afecta a los literales dict, solo la llamada dict misma.

>>> import __builtin__ 
>>> __builtin__.dict = list 
>>> exec "a={}" 
>>> a 
{} 
>>> exec "a=dict()" 
>>> a 
[] 

Obviamente no es el módulo DIS, pero esa es la bomba nuclear el sitio de enfoque órbita.

¿Hay alguna otra manera en la que pueda conectar la evaluación de los literales dict y cambiar lo que sucede?

P.S. para Python2.6

+0

creo que tendría que sustituir a los literales dict con 'dict (tuplas aquí)' en la fuente, como literales dict son sintaxis , así que no es Python si no se interpretan como dicts. – agf

Respuesta

1

Sugiero echar un vistazo al módulo ast, con el que puede ast.parse el código dado y reemplazar cada entrada ast.Dict con la correspondiente llamada al constructor.

(Pero, lo siento, parece que quieres algo realmente extraño.)

+0

Me olvidé de ast, eso es probablemente mejor que dis, aunque definitivamente en la misma categoría. –

+0

Bueno, razonemos: necesita cambiar el comportamiento de un programa (no importa si es Python o lo que sea). Puede cambiarlo en el nivel de fuente, o después de la compilación o parchear el entorno de ejecución. '{}' no puede verse afectado por el entorno (a menos que aplique un parche al intérprete). De modo que puede parchear el código de bytes, o, más robusto, portátil y fácil de depurar, la fuente. – bereal

Cuestiones relacionadas