关于python:有没有更好的方法来创建一个类,它是`dict`的子类但不区分大小写?

Is there a better way to create a class which is a subclass of `dict` but case-insensitive?

我想创建从dict类型继承的类,但可以使用不区分大小写的键访问数据。我实现了一个简单的方法,但我不认为使用instance.__dict__变量是一种合适的方法。有更好的方法吗?

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class MyDict(dict):
    def __init__(self, *args, **kwargs):
        if args:
            for k, v in args[0].iteritems():
                self.__dict__.update({k.lower(): v})

    def __getitem__(self, k):
        return self.__dict__.get(k.lower())

    def __setitem__(self, k, v):
        self.__dict__.update({k.lower(): v})

    def __delitem__(self, k):
        self.__dict__.pop(k, None)


if __name__ == '__main__':
    test_0 = MyDict({'naME': 'python', 'Age': 24})
    print(test_0['name'])    # return 'python'
    print(test_0['AGE'])     # return 24

    test_1 = MyDict()
    test_1['StaCk'] = 23
    print(test_1['stack'])   # return 23
    print(test_1['STACK'])   # return 23


编辑:查看JanneKarila的链接,其中包含更好的解决方案。

不要使用self.u dict_uuuuuuuuuuuuuuuu,它有一个与dict无关的特殊含义,您应该使用super()来调用超类上的相应函数。

例如。,

1
2
3
4
def __setitem__(self, k, v):
    if hasattr(k, 'lower'):
        k = k.lower()
    return super(MyDict, self).__setitem__(k, v)