簡體   English   中英

lambda函數返回在defaultdict中使用的鍵值

[英]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.

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