如何通过同时使用多个键提取字典值

时间:2019-03-28 10:41:38

标签: python list dictionary key

我遇到了以下问题。

dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

常规检索方法:dict1['a']->输出-> 1
预期方法:dict1['a', 'b']->输出-> [1, 2]

我的要求是,通过上述预期方法中同时提供多个键,从字典中提取多个值。

有办法吗?如果必须编辑内置的dict类方法,该怎么做?

4 个答案:

答案 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_dCustomDict类的对象,它将始终使用父类的方法(这样就可以遍历该对象以及您可能希望对字典工作执行的其他操作),除非调用其中一种覆盖方法(init,getitem)。

因此,当一个人使用new_d['a', 'b']时,将调用覆盖的__getitem__方法。覆盖的方法使用__getitem__中的self.dic(这是普通字典)来实际访问给定每个键的字典值。