示例MVR代码:
w_1, w_2 = None, None
tokens = ['hello', 'world', 'type', 'contexts', 'hello', 'again', 'world']
self.type_contexts = defaultdict(lambda: set())
for word in tokens:
self.type_contexts[word] += {(w_2,w_1)}
# Update context
w_2 = w_1
w_1 = word
我希望type_contexts defaultdict映射单词-> {(w_2,w_1)},但是我不确定如何将它们作为集合填写。我一直遇到TypeError之类的TypeErrors:+ =:'set'和'set'
不受支持的操作数类型或者在我的type_contexts行中使用set函数add():
self.type_contexts[word].add({(w_2,w_1)})
导致TypeError:无法散列的类型:'set'
我理解为什么会出现这些错误,但是我不建议如何解决这些问题,而要保留lambda:set()defaultdict
答案 0 :(得分:0)
错误是因为,如果您想将新元素添加到现有的一次使用更新中,则add
期望一个元素(可哈希)不是集合:
a = set()
a.add(1)
a.update({2})
print(a)
输出
{1, 2}
第一行说明了如何使用add
,具体情况如下:
self.type_contexts[word].add((w_2, w_1))
第二个显示了如何将一个集合添加到现有集合,因此您可以将呼叫更改为:
self.type_contexts[word].update({w_2, w_1})
。
尽管我不建议将update与一组单个元素一起使用。
答案 1 :(得分:0)
集合是与|
运算符而不是+
组合在一起的,因此您希望使用|=
而不是+=
。另外,由于您仅添加了一个元素集,因此您可以只add
该元素:
self.type_contexts[word].add((w_2,w_1))