以元组为键的defaultdict,找不到如何在事件键中设置默认值
defaultdict with tuple as the key, how to set default value in the event key isn't found
假设我有一个 defaultdict
,格式如下:
theta = defaultdict(float)
密钥由一个字符串元组组成,即 (label, word)
,关联值是给定单词符合给定标签(词性标记)的概率。
例如,单词 'stand' 可以是名词或动词。所以我可以做类似的事情:
theta[('NOUN', 'stand')] = 0.4
theta[('VERB', 'stand')] = 0.6
theta[('ADJ', 'stand')] = 0.0
其余词性标签依此类推。
我需要做的是让字典 return 默认值为 1,如果它是用一个它不包含的词调用的,并且关联的标签是 'NOUN',并且 return 0 用于所有其他关联标签。例如:
value = theta[('NOUN', 'wordthatdoesntexist')] # this should be 1
value = theta[('VERB', 'wordthatdoesntexist')] # this should be 0
我该怎么做?我可以在初始化步骤中使用 lambda 执行此操作吗?或者有其他方法吗?
defaultdict 无法做到这一点;默认工厂无权访问密钥。您必须编写自己的 dict 子类,使用 __missing__
hook dicts 在您尝试访问丢失的键时查找:
class SomeAppropriateName(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __missing__(self, key):
val = 1.0 if key[0] == 'NOUN' else 0.0
# Uncomment the following line if you want to add the value to the dict
# self[key] = val
return val
可以使用dict
的setdefault()
方法:
d.setdefault(u, int(u[0] == "NOUN"))
如果在 d
中找到 u
,则设置默认值 returns d[u]
。否则,它被插入到字典中,值作为第二个参数提供。
假设我有一个 defaultdict
,格式如下:
theta = defaultdict(float)
密钥由一个字符串元组组成,即 (label, word)
,关联值是给定单词符合给定标签(词性标记)的概率。
例如,单词 'stand' 可以是名词或动词。所以我可以做类似的事情:
theta[('NOUN', 'stand')] = 0.4
theta[('VERB', 'stand')] = 0.6
theta[('ADJ', 'stand')] = 0.0
其余词性标签依此类推。
我需要做的是让字典 return 默认值为 1,如果它是用一个它不包含的词调用的,并且关联的标签是 'NOUN',并且 return 0 用于所有其他关联标签。例如:
value = theta[('NOUN', 'wordthatdoesntexist')] # this should be 1
value = theta[('VERB', 'wordthatdoesntexist')] # this should be 0
我该怎么做?我可以在初始化步骤中使用 lambda 执行此操作吗?或者有其他方法吗?
defaultdict 无法做到这一点;默认工厂无权访问密钥。您必须编写自己的 dict 子类,使用 __missing__
hook dicts 在您尝试访问丢失的键时查找:
class SomeAppropriateName(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __missing__(self, key):
val = 1.0 if key[0] == 'NOUN' else 0.0
# Uncomment the following line if you want to add the value to the dict
# self[key] = val
return val
可以使用dict
的setdefault()
方法:
d.setdefault(u, int(u[0] == "NOUN"))
如果在 d
中找到 u
,则设置默认值 returns d[u]
。否则,它被插入到字典中,值作为第二个参数提供。