我刚刚发现了一些有趣的东西,想问一下。
将字典添加到set
中,我曾假设整个字典都会被添加进去,但实际上只有键被添加了:
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(或库)中是否存在一种数据类型,其本质上类似于列表,但仅保留唯一项?
union
是向集合中添加元素的方法?union
的意思是“构建一个新集合,并将参数的元素添加到新集合中”。这就像列表的extend
方法,但不是原地操作。 - user2357112add
没有真正的创建新集合的版本。union
的可变版本是union_update
。 - user2357112