如何使用python的get()方法在字典中获取两个键的级别?

时间:2019-07-01 21:55:05

标签: python python-3.x

我需要检查字典中两个键的级别并获取其默认值
像这样:

Traceback (most recent call last):
   File "app.py", line 6, in <module>
ModuleNotFoundError: No module named "PyQt5"
[7112] Failed to execute script app

有没有一种简便且最佳的方法?

2 个答案:

答案 0 :(得分:2)

a.get('b', {'c': x}).get('c', x)

编辑:@ andrej-kesely实现a.get('b', {}).get('c', x)更适合。

答案 1 :(得分:0)

您可以为此实现一个功能,例如:

_dummy = object()

def rec_get(dct, *args, default=None):
    for arg in args:
        dct = dct.get(arg, _dummy)
        if dct is _dummy:
            return default
    return dct

然后您可以这样称呼:

rec_get(my_dict, 'b', 'c', default=x)

例如:

>>> my_dict = { 'b' : { 'c': 4 }, 2 : { 'a': 3 } }
>>> rec_get(my_dict, 'b', 'c', default=None)
4
>>> rec_get(my_dict, 'b', 'a', default=None)  # returns None
>>> rec_get(my_dict, 'b', 'a', default=1425)
1425
>>> rec_get(my_dict, 'b', default=None)
{'c': 4}
>>> rec_get(my_dict, 2, default=None)
{'a': 3}
>>> rec_get(my_dict, 2, 'a', default=None)
3
>>> rec_get(my_dict, 2, 'b', default=6)
6
>>> rec_get(my_dict, 3, 'b', default=6)
6

这使您可以查询键本身不是字符串(整数,元组等)的字典。

您可以进行任意深度的查询,并且从没有找到键的那一刻起,它将返回default=...值。但是 not 并没有考虑到中间词典之一可能不是字典类的对象。在这种情况下,它可能会引发AttributeError,或者如果TypeError属性不是函数或不遵循参数协定,则会引发.get