【问题标题】:How to initialize key,value pair in dictionary with lambda expression?如何使用 lambda 表达式初始化字典中的键、值对?
【发布时间】:2014-09-20 05:36:11
【问题描述】:

我有一个字典,其中键是一个元组(类,单词)。我想为特定类初始化字典的值,而不管单词是否为特定的默认值。 例如:dict = defaultdict(lambda : -1.0)

dict [('A', any word here)] = 根据 lambda 表达式的某个常数值

元组的这里('A',这里的任何单词)- A 是类,而“这里的任何单词”可以是任何随机的未知单词。 这是我的尝试,但我无法找出正确的方法: dict = defaultdict(lambda tag, x: some_constant))。

如何使 x 成为可能出现在其位置的占位符?

【问题讨论】:

    标签: python-2.7 dictionary lambda


    【解决方案1】:

    据我了解,您希望字典具有取决于部分键的默认值。如果是这样,我认为这可以满足您的要求:

    class MyDict(dict):
        def __missing__(self, key):
            class_, word = key
            self[key] = class_ # Replace this with what you want
            return self[key]
    

    现在,MyDict 的行为与普通字典一样,只是根据您必须根据需要调整的自定义函数填充缺失值。

    例如:

    In [22]: d = MyDict()
    In [23]: d[(int, 'delta')]
    Out[23]: int    
    In [24]: d[(str, 'gamma')]
    Out[24]: str    
    In [25]: d
    Out[25]: {(str, 'gamma'): str, (int, 'delta'): int}
    

    注意一点:当您对缺少键的字典使用get 属性时,它不会调用__missing__。相反,它将返回您指定为 get 的第二个参数的任何内容,默认为 None

    defaultdict 的问题

    有人可能希望defaultdict 随心所欲:

    dict = defaultdict(lambda tag, x: some_constant))
    

    但是,这不起作用,因为defaultdict 构造函数不接受参数。使用defaultdict,无论key如何,默认值都必须相同。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2021-01-07
      • 2013-12-03
      相关资源
      最近更新 更多