![](/img/trans.png)
[英]How to use defaultdict to create a dictionary with a lambda function?
[英]lambda function returning the key value for use in defaultdict
函數collections.defaultdict返回一個默認值, 如果我的字典中沒有鍵,則可以由我自己制作的lambda函數定義。
現在,我希望我的defaultdict返回未修改的鍵值,如果該鍵不存在。 因此,我使用lambda標識函數lambda x:x。 我希望defaultdict返回密鑰。
>>>translation=defaultdict(lambda x:x)
>>>translation['Haus']='maison'
>>>translation['computer']='ordinateur'
>>>translation['computer']
'ordinateur'
但是,當我用迄今為止缺席的密鑰呈現我的defaultdict時:
>>>translation['email']
我希望defaultdict轉換返回'email'。 然而,python 2.7說:
TypeError: <lambda>() takes exactly 1 argument (0 given)
當然,我正在做一些愚蠢的事情。 但是什么?
不幸的是,用於定義默認dict中使用的缺失鍵的工廠函數不帶參數 - 也就是說,與看似顯而易見的不同,它不會傳遞實際的缺失鍵。
因此,您無法知道嘗試使用此方法的密鑰是什么。
另一種方法是自己子類化dict
(而不是使用DefaultDict),並添加一個__missing__
方法:只要有人試圖檢索一個未存在的密鑰,它就會被調用,然后你可以自由地返回收到的密鑰:
In [86]: class MyDict(dict):
...: __missing__ = lambda self, key: key
...:
In [87]: m = MyDict()
In [88]: m["apples"]
Out[88]: 'apples'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.