2012-03-21 70 views
5

免责声明:是的,我意识到我的建议很疯狂,我有一个非常特殊的(ab)用例。有没有办法将python字典文字评估为有序的字典?

在一个特定的exec中,我希望字典文字能够评估为有序的字典,所以我可以保留exec'd代码的原始顺序。

我试图在执行exec之前替换__builtin __。dict(在恢复之后非常小心),但是这并不影响dict文字,只是dict自己调用。

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

显然有dis模块,但这是从轨道方法nuke网站。

有没有其他一些方法我可以钩入字典文字的评估和改变会发生什么?

P.S.对于Python2.6

+0

我想你不得不更换'字典(这里的元组)'源的字典文字,如字典文字是语法,所以如果它们不被解释为字典,它就不是Python。 – agf 2012-03-21 06:59:03

回答

1

我建议看看ast模块,你可以使用ast.parse给定的代码,并用相应的构造函数调用代替每个ast.Dict条目。

(但很抱歉,似乎你想要的东西真的很奇怪。)

+0

我忘了ast,这可能比dis好,尽管绝对是在同一类别。 – 2012-03-21 07:05:29

+0

好吧,让我们来看看:你需要改变一个程序的行为(不管它是Python还是什么)。您可以在源代码级别上进行更改,也可以在编译之后或修补执行环境。 '{}'不能受环境影响(除非你修补解释器)。所以你要么修补字节码,要么更健壮,便携和调试友好,来源。 – bereal 2012-03-21 17:55:57