可变设置对象作为python3中的字典键

时间:2018-03-28 09:06:48

标签: python python-3.x

在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}

为什么可变集合对象(内置集函数)可以用作字典键?谢谢你的解释

1 个答案:

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