集合理解在 Python 中给出 "unhashable type"(列表集合)
Set comprehension gives "unhashable type" (set of list) in Python
我有以下元组列表:
list_of_tuples = [('True', 100, 'Text1'),
('False', 101, 'Text2'),
('True', 102, 'Text3')]
我想将每个元组的所有第二个元素收集到一个集合中:
my_set = set()
my_set.add({tup[1] for tup in list_of_tuples})
但它抛出以下错误:
TypeError: unhashable type: 'set'
当我打印出迭代中的各个元素时,它表明集合理解的结果不包含预期的标量,而是包含列表:
print {tup[1] for tup in list_of_tuples}
set([100, 101, 102])
为什么会这样?为什么这会先将元素放入列表中,然后将列表放入集合中而没有任何提示列出?我该如何更正我的解决方案?
您正在定义一个空集,然后试图在其中添加另一个集。相反,只需直接创建集合:
my_set = {tup[1] for tup in list_of_tuples}
而您的打印结果正是 Python 表示集合的方式;它没有向您显示有一个列表,它向您显示了一个由 100、101 和 102 组成的集合。
您放入集合中的单个项目不能是可变的,因为如果它们发生变化,有效散列将改变并且检查是否包含的能力将崩溃。
set
的内容可以改过来lifetime.So这是非法的。
所以尝试使用这个:
list_of_tuples = [('True', 100, 'Text1'),
('False', 101, 'Text2'),
('True', 102, 'Text3')]
my_set= { tup[1] for tup in list_of_tuples }
# set comprehensions with braces
print my_set
希望对您有所帮助。
我有以下元组列表:
list_of_tuples = [('True', 100, 'Text1'),
('False', 101, 'Text2'),
('True', 102, 'Text3')]
我想将每个元组的所有第二个元素收集到一个集合中:
my_set = set()
my_set.add({tup[1] for tup in list_of_tuples})
但它抛出以下错误:
TypeError: unhashable type: 'set'
当我打印出迭代中的各个元素时,它表明集合理解的结果不包含预期的标量,而是包含列表:
print {tup[1] for tup in list_of_tuples}
set([100, 101, 102])
为什么会这样?为什么这会先将元素放入列表中,然后将列表放入集合中而没有任何提示列出?我该如何更正我的解决方案?
您正在定义一个空集,然后试图在其中添加另一个集。相反,只需直接创建集合:
my_set = {tup[1] for tup in list_of_tuples}
而您的打印结果正是 Python 表示集合的方式;它没有向您显示有一个列表,它向您显示了一个由 100、101 和 102 组成的集合。
您放入集合中的单个项目不能是可变的,因为如果它们发生变化,有效散列将改变并且检查是否包含的能力将崩溃。
set
的内容可以改过来lifetime.So这是非法的。
所以尝试使用这个:
list_of_tuples = [('True', 100, 'Text1'),
('False', 101, 'Text2'),
('True', 102, 'Text3')]
my_set= { tup[1] for tup in list_of_tuples }
# set comprehensions with braces
print my_set
希望对您有所帮助。