python – 是否可以使用lambda作为字典默认值?

前端之家收集整理的这篇文章主要介绍了python – 是否可以使用lambda作为字典默认值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试保留一个打开文件的字典,以便将数据拆分成单个文件.当我从字典中请求文件时,如果密钥不存在,我希望它被打开.但是,看起来我不能使用lambda作为默认值.

例如

files = {}
for row in data:
  f = files.get(row.field1,lambda: open(row.field1,'w'))
  f.write('stuff...')

这不起作用,因为f设置为函数,而不是结果.使用上述语法的setdefault也不起作用.除此之外我还能做些什么:

f = files.get(row.field1)
if not f:
    f = files[row.field1] = open(row.field1,'w')
最佳答案
这个用例对于defaultdict来说太复杂了,这就是为什么我不相信Python stdlib中存在这样的东西.但是,您可以轻松地自己编写一个通用的“扩展”defaultdict,它将丢失的密钥传递给回调:

from collections import defaultdict

class BetterDefaultDict(defaultdict):
  def __missing__(self,key):
    return self.setdefault(key,self.default_factory(key))

用法

>>> files = BetterDefaultDict(lambda key: open(key,'w'))
>>> files['/tmp/test.py']

这适用于Python 2.7,不知道旧版本:)另外,不要忘记再次关闭这些文件

finally:
  for f in files.values(): f.close()

猜你在找的Python相关文章