在python文档中它表示" set类型是可变的....由于它是可变的,它没有哈希值,不能用作字典键或另一个元素设定"不像它的冷冻集是不可变对象。但是当我尝试时:
>>> dict(zip(set(['a', 'b', 'c']), [1, 2, 3]))
>>> {'a': 1, 'b': 2, 'c': 3}
也
>>> dict.fromkeys(set([1, 2, 3, 4]))
>>> {1: None, 2: None, 3: None, 4: None}
为什么可变集合对象(内置集函数)可以用作字典键?谢谢你的解释
答案 0 :(得分:1)
dict
构造函数可以使用可迭代(例如set
)并从中创建字典。您的第一个表达式甚至没有将一组设置传递给dict
。
第一个表达式的计算结果类似于(见注释)
dict(zip(set(['a', 'b', 'c']), [1, 2, 3])) =>
dict([('a',1),('b',2),('c',3)])
与set
无关。第二个表达式变为
dict.fromkeys(set(set([1, 2, 3, 4])) =>
dict.fromkeys(set([1, 2, 3, 4])) =
与使用
没什么不同dict.fromkeys([1, 2, 3, 4])
因为fromkeys
将迭代参数。
此外,第二个set
是多余的(如果您想要一个包含所需集合集的集合set([set(...)])
。
你想要的是:
>>> {set((1,2,3)): 4}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
或
>>> dict([(set([1]),1)])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'