簡體   English   中英

如何使用 try/except 塊優化代碼?

[英]How to optimize the code with try/except block?

我有 function 之類的:

def get_nested_dicts(items: dict, *keys, default=None):
    for key in keys:
        try:
            items = items[key]
        except KeyError:
            return default
        else:
            if not isinstance(items, dict):
                break

    return items

主要思想是優化嵌套字典的工作,例如,我有如下的收縮:

字典 = {'a': {'b': {'c': 10}}}

Output 將類似於:

print(get_nested_dicts(items, 'a', 'b', 'c')) # 10 
print(get_nested_dicts(items, 'a', 'c', 'b')) # None
print(get_nested_dicts(items, 'd', 'e', 'g')) # None

並且想要更多地優化它,以更pythonic的方式制作。 是否有一些解決方案可以優化它?

您可以使用dict.get()如下:

def get_nested_dicts(items: dict, *keys, default=None):
    for key in keys:
        items = items.get(key, default)
        if not isinstance(items, dict):
            break

    return items

輸入

dictionary = {'a': {'b': {'c': 10}}}

print(get_nested_dicts(dictionary, 'a', 'b', 'c')) 
print(get_nested_dicts(dictionary, 'a', 'c', 'b')) 
print(get_nested_dicts(dictionary, 'd', 'e', 'g')) 

Output

10
None
None

這里get()需要兩個 arguments 鍵和默認值返回。 如果鍵存在於字典中,則返回與鍵對應的值,否則返回None

我想, .get() function 會幫助你稍微優化一下。

def get_nested_dicts(items: dict, *keys, default=None):
    for key in keys:
        items = items.get(key, default)
        if not isinstance(items, dict): break
    return items

另一種 Pythonic 方法是使用通配符 - 'reduce'。

from functools import reduce

def get_nested_dicts(items: dict, *keys, default=None):
    return reduce(lambda v, k: v.get(k, default) if v else default, keys, items)
    

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM