簡體   English   中英

python字典用dict.get()行為替換dict []運算符

[英]python dictionary replace dict[] operator with dict.get() behavior

my_dict = {'a': 1}

我希望my_dict['a']的行為與my_dict.get('a')相同,如果我這樣做my_dict['b'] ,則不會引發錯誤,但會得到默認的None值,相同從my_dict.get('b')獲取它的方式

my_dict = {'a': {'b': 2}}我可以執行my_dict['a']['b'] ,它將作為my_dict.get('a').get('b')

my_dict['b'] = 2其作用與my_dict.update({'b': 2})

是否可以這樣做,而不必從dict繼承?

每次嘗試訪問不存在的鍵時,都可以使用collections.defaultdict()對象向字典添加新值:

>>> from collections import defaultdict
>>> d = defaultdict(lambda: None)
>>> d['a'] is None
True
>>> d
defaultdict(<function <lambda> at 0x10f463e18>, {'a': None})

如果您不想添加鍵,請創建實現__missing__方法dict的子類:

class DefaultNoneDict(dict):
    def __missing__(self, key):
        return None

這顯然不會添加新的鍵:

>>> d = DefaultNoneDict()
>>> d['a'] is None
True
>>> d
{}

如果要鏈接 .get()調用,則必須返回一個空字典,否則dict.get(keyA).get(keyB)會因屬性錯誤而失敗(返回的第一個None不會包含.get()方法)。

一般來說,最好堅持使用默認類型並明確表示。 沒錯:

value = some_d.get(outer, {}).get(inner)

使用帶有自定義__missing__鈎子的defaultdictdict子類有一個缺點:缺少鍵時,它們總是會產生默認值,即使您在代碼中的其他地方意外地產生了不正確的鍵也是如此。 我經常選擇相對於defaultdict的顯式dict.get()dict.setdefault()代碼路徑,正是因為我希望一個不存在的鍵在項目的其他部分產生錯誤。

暫無
暫無

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

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