python – lambda函数返回在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'
上一篇:python – 从非空的defaultdict中挑选一个随机元素


下一篇:python – 在初始化时填充defaultdict