gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:52:21 25 4
gpt4 key购买 nike

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

这是我的代码:

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

最佳答案

编辑:参见 Janne Karila 的 link ,其中包含更好的解决方案。

而不是使用 self.__dict__,它具有与 this 是字典无关的特殊含义,您应该使用 super() 来调用父类(super class)上的相应函数。

例如,

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

关于python - 有没有更好的方法来创建一个类,它是 `dict` 的子类但不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20543468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com