Python 使用元组作为键的defaultdict,如何在事件键中设置默认值是';找不到
假设我有一个Python 使用元组作为键的defaultdict,如何在事件键中设置默认值是';找不到,python,dictionary,tuples,defaultdict,Python,Dictionary,Tuples,Defaultdict,假设我有一个defaultdict格式如下: theta = defaultdict(float) 键由字符串元组组成,即(标签,单词),关联值是给定单词符合给定标签的概率(词性标记) 例如,单词“stand”可以是名词或动词。所以我可以这样做: theta[('NOUN', 'stand')] = 0.4 theta[('VERB', 'stand')] = 0.6 theta[('ADJ', 'stand')] = 0.0 等等,用于语音标签的其余部分 我需要做的是,如果使用字典不包含的
defaultdict
格式如下:
theta = defaultdict(float)
键由字符串元组组成,即(标签,单词)
,关联值是给定单词符合给定标签的概率(词性标记)
例如,单词“stand”可以是名词或动词。所以我可以这样做:
theta[('NOUN', 'stand')] = 0.4
theta[('VERB', 'stand')] = 0.6
theta[('ADJ', 'stand')] = 0.0
等等,用于语音标签的其余部分
我需要做的是,如果使用字典不包含的单词调用字典,并且关联的标签为“NOUN”,那么字典在默认情况下返回值1,对于所有其他关联的标签,返回0。例如:
value = theta[('NOUN', 'wordthatdoesntexist')] # this should be 1
value = theta[('VERB', 'wordthatdoesntexist')] # this should be 0
我该怎么做?我可以在初始化步骤中使用lambda完成吗?或者有其他方法吗?默认dict无法做到这一点;默认工厂无权访问密钥。您必须编写自己的dict子类,在尝试访问缺少的键时,使用
\uuuuuu missing\uuuu
hook dict查找:
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
defaultdict不能这样做;默认工厂无权访问密钥。您必须编写自己的dict子类,在尝试访问缺少的键时,使用
\uuuuuu missing\uuuu
hook dict查找:
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
,则setdefault返回d[u]
。否则,它将插入dict中,其值作为第二个参数提供。您可以使用dict的setdefault()
方法:
d.setdefault(u, int(u[0] == "NOUN"))
如果在d
中找到u
,则setdefault返回d[u]
。否则,它将被插入到dict中,其值作为第二个参数提供。您需要某种类型的检查词“word exists”,至少在伪代码中。@pvg:我不确定您的意思。你是说我需要一个明确的检查来处理self
案例中的键吗<代码>\uuuu缺失\uuuu
不会因为这种情况而被调用。重新阅读它时,我想我的意思是“单词不存在”没有得到很好的定义。它是否表示“不作为任何键的一部分存在”或“此词性/词性对不存在”?但看起来像是问问题的人把问题解决了。@pvg:说得好。如果('VERB','foo')
已经作为值为0.5
的键存在,那么访问('noon','foo')
的默认值为1.0
可能是一件坏事。我认为找出正确的方法需要比我们有更多的上下文,而且可能比dict有更多的上下文。你需要某种检查词“word exists”,至少在伪代码中。@pvg:我不确定你的意思。你是说我需要一个明确的检查来处理self案例中的键吗<代码>\uuuu缺失\uuuu
不会因为这种情况而被调用。重新阅读它时,我想我的意思是“单词不存在”没有得到很好的定义。它是否表示“不作为任何键的一部分存在”或“此词性/词性对不存在”?但看起来像是问问题的人把问题解决了。@pvg:说得好。如果('VERB','foo')
已经作为值为0.5
的键存在,那么访问('noon','foo')
的默认值为1.0
可能是一件坏事。我认为,找出正确的做法需要比我们有更多的背景,可能比《格言》有更多的背景。