我正在用python(2.7)做一个数据挖掘作业。我为所有单词(存在于类别中)创建了一个权重词典,并且表示在该词典中不存在的单词,我想指定默认值。 首先,我在每次使用setdefault之前尝试过,它完美地工作,但不知何故,我认为它看起来并不那么pythonic。因此,我尝试使用defaultdict,大多数情况下工作得很好。但是,有时会返回不正确的值。首先,我认为这可能是由defaultdict或lambda函数引起的,但显然没有错误。将值赋给不存在的对象属性
for node in globalTreeRoot.traverse():
...irrelevant...
weight_dict = {.......}
default_value = 1.0/(totalwords + dictlen)
node.default_value = 1.0/ (totalwords + dictlen)
......
node.weight_dict_ori = weight_dict
node.weight_dict = defaultdict(lambda :default_value,weight_dict)
所以,当我试图打印一个在循环中不存在的值时,它给了我一个正确的值。但是,代码完成运行后,当我尝试:
print node.weight_dict["doesnotexist"],
它给了我一个不正确的值,当通常不正确相关的一些其他节点的值。我试过搜索python命名系统或动态地给对象属性赋值,但没搞清楚。
顺便提一句,是defaultdict比更快存在使用它(K,V)每次?
只是为了明确的OP,'get'的两个参数形式允许指定一个默认值,如果指定的键不存在于字典中,则返回一个默认值。 –
谢谢!我认为** get(key,defaultvalue)**正是我所期待的。此外,感谢您解释“关闭”。我想我误解了它的变量范围方法。 –