defaultdict(lambda:set())如何添加

时间:2018-10-29 01:15:52

标签: python set defaultdict

示例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

2 个答案:

答案 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))