在Python字典中模拟PHP数组

时间:2012-11-29 19:39:36

标签: php python

将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的值。

我还没有找到让它返回None的想法。因为如果__missing__返回None,那么第二行会产生错误:NoneType是unsubscriptable。

如果有人有想法解决这个问题,我将不胜感激,有几个月我正在寻找一种模拟这种PHP“神奇”的解决方案

1 个答案:

答案 0 :(得分:1)

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

Python首先评估toto2["a"]。如果"a"不在toto2,则toto2["a"]将返回无。下一步Python将评估None["b"]并提出TypeError

因此,在Python中无法实现您期望的行为。