在Python字典中模拟PHP数组



将PHP-GTK应用程序转换为Python,我需要一个尽可能像PHP数组一样工作的字典。经过搜索和尝试,我在myDict()类中对dict进行了子类化,并实现了第一个重要功能,即能够完成这项工作:

dict1 = myDict()
dict1[foo1][foo2][foo3] = 1

这是在myDict()类中实现的。

class myDict(dict) :
def __missing__(self, arg) :
self.__setitem__(arg, myDict())
return self.__getitem__(arg)

现在出现了一个问题。在PHP中,如果我试图获得一个未定义的键,它会返回Null(相当于Python中的None)。在标准的Python dict中,它会返回一个错误。不幸的是,在我的myDict字典中,它返回了一个空的myDict

toto2 = myDict()
x = toto2["a"]["b"]
print x

打印显示:{}这段代码的PHP等价物将返回Null,我需要上面的Python代码返回None作为x的值。

我还没有找到让它返回的想法。没有。因为如果__missing__返回None,那么第二行将引发错误:NoneType是不可订阅的。

如果有人有解决这个问题的想法,我将不胜感激,几个月来我一直在寻找一个解决方案来模仿PHP 的"魔力">

假设当密钥不在时,我们可以使myDict返回NonemyDict。然后考虑toto2["a"]["b"]

Python首先评估toto2["a"]。如果"a"不在toto2中,则toto2["a"]返回None。接下来,Python将评估None["b"]并引发一个TypeError

因此,您想要的行为在Python中是不可能的。

最新更新