我遇到了以下问题。
dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
常规检索方法:dict1['a']
->输出-> 1
预期方法:dict1['a', 'b']
->输出-> [1, 2]
我的要求是,通过上述预期方法中同时提供多个键,从字典中提取多个值。
有办法吗?如果必须编辑内置的dict类方法,该怎么做?
答案 0 :(得分:1)
您可以使用列表理解:[dict1[key] for key in ('a', 'b')]
等效于
output = []
for key in ('a', 'b'):
output.append(dict1[key])
答案 1 :(得分:0)
您可以执行其他答案中所述的内容,也可以使用map
字典方法在键列表中使用get
:
map(dict1.get, ["a", "b"])
答案 2 :(得分:0)
使用列表理解:
[ dict[k] for k in ('a','b')]
[ dict[k] for k in my_iterable ]
如果可迭代项中的任何键不在dict中,将抛出KeyError。这样做可能更好
[ dict.get(k, my_default_value) for k in my_iterable ]
答案 3 :(得分: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
(这是普通字典)来实际访问给定每个键的字典值。