2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
至少有三種方法:
用dict.setdefault
>>> data = {}
>>> data.setdefault('foo', []).append(42)
>>> data
{'foo': [42]}
使用 ,這與 不同,它采用可調(diào)用:defaultdict.setdefault
>>> from collections import defaultdict
>>> data = defaultdict(list)
>>> data
defaultdict(<class 'list'>, {})
>>> data['foo'].append(42)
>>> data
defaultdict(<class 'list'>, {'foo': [42]})
最后,子類和實(shí)現(xiàn):dict__missing__
>>> class MyDict(dict):
... def __missing__(self, key):
... self[key] = value = []
... return value
...
>>> data = MyDict()
>>> data['foo'].append(42)
>>> data
{'foo': [42]}
請注意,您可以將最后一個(gè)視為最靈活的密鑰,您可以訪問處理它時(shí)缺少的實(shí)際密鑰。 是一個(gè)類工廠,它也生成一個(gè) 子類。但是,可調(diào)用的沒有傳遞任何參數(shù),但是,它足以滿足大多數(shù)需求。defaultdictdict
此外,請注意,and 方法將保留默認(rèn)行為,這在創(chuàng)建數(shù)據(jù)結(jié)構(gòu)后可能是不可取的,您可能想要通常,或者至少,您不想再添加鍵。defaultdict__missing__KeyErrormydict[key]
在這兩種情況下,您都可以從字典子類創(chuàng)建常規(guī)字典,例如.這通常應(yīng)該非??欤词箤τ诖笮臀矬w也是如此,特別是如果它是一次性成本。對于 ,您還可以將 設(shè)置為 ,舊行為將返回:dict(data)dictdefaultdictdefault_factoryNone
>>> data = defaultdict(list)
>>> data
defaultdict(<class 'list'>, {})
>>> data['foo']
[]
>>> data['bar']
[]
>>> data
defaultdict(<class 'list'>, {'foo': [], 'bar': []})
>>> data.default_factory = None
>>> data['baz']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'baz'
>>>

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用 :dict.setdefault
>>> d = {}
>>> d.setdefault('k', []).append(1)
>>> d
{'k': [1]}
>>> d.setdefault('k', []).append(2)
>>> d
{'k': [1, 2]}
關(guān)于字典中method_descriptor的幫助:
dict.setdefault = setdefault(...)D.setdefault(k[,d]) -> D.get(k,d),如果 k 不在 D 中,也設(shè)置 D[k]=d
添加回答
舉報(bào)