我需要检查字典中两个键的级别并获取其默认值
像这样:
Traceback (most recent call last):
File "app.py", line 6, in <module>
ModuleNotFoundError: No module named "PyQt5"
[7112] Failed to execute script app
有没有一种简便且最佳的方法?
答案 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
。