有没有一种方法可以将Python字典文字表达式解析为有序字典?

4

声明:是的,我意识到我的建议很疯狂,我有一个非常特殊的(滥用)情况。

在特定的exec中,我希望字典字面值计算为有序字典,以便我可以保留来自exec'd代码的原始顺序。

我尝试在exec之前替换__builtin__.dict(非常小心地在执行后恢复),但这只影响dict调用本身,而不影响dict字面值。

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

显然有dis模块,但那是从轨道上摧毁网站的方法。

还有其他方法可以钩入字典字面值的评估并更改发生的事情吗?

附:Python2.6


我认为您需要在源代码中将字典文字替换为 dict( tuples here ),因为字典文字是语法,如果它们不被解释为字典,则不是Python。 - agf
1个回答

1
我建议您查看ast模块,使用它可以ast.parse给定的代码,并将每个ast.Dict条目替换为相应的构造函数调用。
(但是,抱歉,似乎您想要一些非常奇怪的东西。)

我忘记了ast,那可能比dis更好,尽管它们肯定属于同一类别。 - Gordon Wrigley
好的,让我们来推理一下:你需要改变一个程序的行为(无论是Python还是其他语言)。你可以在源代码级别上进行更改,或者在编译后进行更改,或者对执行环境进行修补。{} 不能受环境影响(除非你修补解释器)。因此,你可以修补字节码,或者更加健壮、便携和易于调试的方式是修改源代码。 - bereal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接