一:字典dict
python中的dict和golang中map的概念是一致的,称为“字典”。
d = {'minping':99, 'shuxin':98}
print(d)
print(d["minping"])
print(d["minping11"]) 直接报错:KeyError: 'minping1'
print(d.get("minping1"))
d.pop("minping")
print(d)
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
二:集合set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key(如果在初始化或者add过程中有的话,也会剔除掉重复的元素)。
要创建一个set,需要提供一个list作为输入集合:
s = set([1,1,1,2,3,2])
print(s)
s.add(4)
s.add(-1)
print(s)
s.remove(3)
print(s)
s.remove(-2)
print(s)
运行结果:
E:\python_study>python 1.py
set([1, 2, 3])
set([1, 2, 3, 4, -1])
set([1, 2, 4, -1])
Traceback (most recent call last):
File "1.py", line 115, in <module>
s.remove(-2)
KeyError: -2
从上可见,set有add和remove操作来增加删除元素,但是删除时如果key不存在,则直接报错。
从这里面来看,set好像也没有什么特点,那没为什么把set写在这篇文章里?如果你这样看待set那就大错特错了,set的功能远不止这些:set是作为set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
s1 = set([1,2,3])
s2 = set([2,3,4])
print(s1 & s2) #交集
print(s1 | s2) #并集
print(s1 - s2) #差集
运行结果:
E:\python_study>python 1.py
set([2, 3])
set([1, 2, 3, 4])
set([1])
所以说用pyhton的set进行一些小计算是不是很方便!
网友评论