字典提取常规方法
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(d['a']) # prints: 1
要求:
print(d['a', 'b']) # should print: [1, 2]
通过子类dict
并修改__getitem__()
方法(如果可能的话),将有可能做到这一点吗?
答案 0 :(得分:0)
如果您真的想使用子类化,则可以很好地完成工作:
class CustomDict(dict):
def __init__(self, dic):
self.dic = dic
def __getitem__(self, items):
values = []
for item in items:
values.append(self.dic[item])
return values if len(values) > 1 else values[0]
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
new_d = CustomDict(d)
print(new_d['a'])
print(new_d['a', 'b'])
print(new_d['a', 'b', 'c'])
print(new_d['a', 'c', 'd'])
输出:
1 [1, 2] [1, 2, 3] [1, 3, 4]
说明:
new_d
是CustomDict
类的对象,它将始终使用父类的方法(这样就可以遍历该对象以及您可能希望对字典工作执行的其他操作),除非调用其中一种覆盖方法(init,getitem)。
因此,当一个人使用new_d['a', 'b']
时,将调用覆盖的__getitem__
方法。覆盖的方法使用__getitem__
中的self.dic
(这是普通字典)来实际访问给定每个键的字典值。
答案 1 :(得分:-2)
def ret_multiple(dict, *args)
for k in args:
if k in dict:
ret.append(dict[k])
return ret
vals = ret_multiple(d, 'a', 'b')