【发布时间】:2016-12-26 12:08:43
【问题描述】:
python 中真正让我害怕的是这个错误:TypeError: unhashable type。
理想情况下,我希望有一个数据结构,我只使用集合而不是列表,这样我就可以像这样使用集合运算符:
a = {({1,2}, 'alpha'), ({2,3}, 'beta')}
b = {({1,2}, 'alpha')}
c = a - b # c = {({2,3}, 'beta')}
我什至无法创建包含集合的集合,因为我得到了TypeError: unhashable type: set
所以我尝试使用列表而不是集合。这样我至少可以为a和b分配值。但是再次使用 set 方法从另一个集合中减去一个集合会导致相同的错误:
a = [({1,2}, 'alpha'), ({2,3}, 'beta')]
b = [({1,2}, 'alpha')]
c = list(set(a) - set(b)) # c = [({2,3}, 'beta')]
我用字典而不是列表尝试过,同样的错误。
问题:我如何比较两个包含某处包含集合的元素的字符串?
或者我认为根本错误/“不是pythonic”并且错误植根于数据结构本身?
感谢您的帮助!
莫夫
【问题讨论】:
-
抱歉打错了!
-
好吧,现在正如@Slam 所建议的那样,将
{1, 2}替换为frozenset([1, 2])就可以了。
标签: python python-3.x