函数collections.defaultdict返回一个默认值,如果字典中没有键,那么这个默认值可以由我自己创建的lambda函数定义。
现在,如果没有未修改的键,我希望我的defaultdict返回未修改的键值。因此,我使用lambda标识函数lambda :x。我希望defaultdict返回密钥。
>>>translation=defaultdict(lambda x:x)
>>>translation['Haus']='maison'
>>>translation['computer']='ordinateur'
>>>translation['computer']
'ordinateur'但是,当我使用迄今缺席的键显示默认值时:
>>>translation['email']我希望默认翻译会返回“电子邮件”。然而,python 2.7说:
TypeError: <lambda>() takes exactly 1 argument (0 given)我肯定是在做傻事。但是什么?
发布于 2016-12-02 12:07:03
不幸的是,用于定义默认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'https://stackoverflow.com/questions/40931783
复制相似问题