我刚刚遇到了一些我想问的有趣的事情。
将字典添加到 aset
中,我曾假设该字典将作为完整字典添加,但事实并非如此。仅添加键:
dicty = {"Key1": "Val1", "Key2": "Val2"}
setunion = set()
setunion.union(dicty)
=> set(['Key2', 'Key1'])
当您尝试使用它添加它时set.add()
,会出现错误:
setadd = set()
setadd.add(dicty)
Traceback (most recent call last):
File "python", line 1, in <module>
TypeError: unhashable type: 'dict'
显然,这种行为与列表非常不同:
listy = []
listy.append(dicty)
listy
=> [{'Key2': 'Val2', 'Key1': 'Val1'}]
在文档中,它说集合是可散列对象的无序集合,这是对上述一些问题的暗示。
问题
这里发生了什么?集合项必须是可散列的,所以很明显,这与为什么我只用 将键添加到集合中.union()
,但为什么用.add()
?
列表中集合的行为差异背后是否存在一些可用性原因?
Python(或库)中是否存在本质上类似于列表但仅保留唯一项的数据类型?