Python 字典键的有效类型
字典的值可以是任何Python对象
键必须是不可变对象,如标量类型(整数、浮点数、字符串)或元组(中的所有对象不可变)
通过hash()函数,你可以判断某个对象是否是可哈希的(即可以用做字典的键)
In [218]: hash('str')
Out[218]: -546589834
In [219]: hash((1, 2, (3, 4)))
Out[219]: 1229485614
In [220]: hash((1, 2, [3, 4]))
---------------------------------------------------------------------------
TypeError: unhashable type: 'list'
如果要将列表当做键,最简单的方法就是将其转换为元组:
In [221]: d = {}
In [222]: d[tuple([1, 2, 3])] = 5
In [223]: d
Out[223]: {(1, 2, 3): 5}
集合 是由唯一元素组成的无序集
#集合创建方式有两种 set函数 或 用大括号包起来的集合字面量
In [224]: set([2, 1, 3, 2, 3])
Out[224]: {1, 2, 3}
In [225]: {1, 2, 2, 3, 3}
Out[225]: {1, 2, 3}
##集合支持各种集合运算,如并 交 差 对称差等
In [226]: a = {1, 2, 3, 4, 5}
In [227]: b = {3, 4, 5, 6, 7, 8}
##并
In [228]: a | b
Out[228]: {1, 2, 3, 4, 5, 6, 7, 8}
##交
In [229]: a & b
Out[229]: {3, 4, 5}
##差
In [230]: a - b
Out[230]: {1, 2}
##对称差
In [231]: a ^ b
Out[231]: {1, 2, 6, 7, 8}
##判断一个集合是否是另一个集合的子集或超集
In [232]: a = {1, 2, 3, 4, 5}
##判断是否为子集
In [233]: {1, 2, 3}.issubset(a)
Out[233]: True
##判断是否是超集
In [235]: a.issuperset({1, 2, 3})
Out[235]: True
In [236]: a
Out[236]: {1, 2, 3, 4, 5}
##添加元素
In [237]: a.add(6)
In [238]: a
Out[238]: {1, 2, 3, 4, 5, 6}
##移除元素
In [239]: a.remove(6)
In [240]: a
Out[240]: {1, 2, 3, 4, 5}