一、创建字典
字典是拥有灵活尺寸的键值对集合,其中键和值都是Python对象。用大括号{}
是创建字典的一种方式,在字典中用逗号将键值对分隔:
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic # 结果:{'a': 'string', 'b': 1, 'c': [2, 4]}
也可以用dict
方法从序列生成字典:
dic = dict(zip(range(5), reversed(range(5))))
dic # 结果为:{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}
二、操作字典中的元素
2.1 访问
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic['b'] # 结果:1
2.2 插入
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic[4] = 5
dic # 结果:{'a': 'string', 'b': 1, 'c': [2, 4], 4: 5}
2.3 替换
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic['a'] = 5
dic # 结果:{'a': 5, 'b': 1, 'c': [2, 4]}
2.4 检查
用in
检查字典中是否存在某个键
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
'a' in dic # 结果:True
'd' in dic # 结果:False
2.5 删除
可以使用del
关键字或pop
方法删除值,pop
方法会在删除的同时返回被删的值,并删除键:
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
del dic['a']
dic # 结果:{'b': 1, 'c': [2, 4]}
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
ret = dic.pop('a')
ret # 结果:'string'
dic # 结果:{'b': 1, 'c': [2, 4]}
2.6 键、值的迭代器
keys方法和values方法会分别为你提供字典键、值的迭代器,还需要使用list
才能转化为列表:
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
list(dic.keys()) # 结果:['a', 'b', 'c']
list(dic.values()) # 结果:['string', 1, [2, 4]]
2.7 合并
使用update
方法可以将两个字典合并,但只能合并两个,即只能传入update
一个字典:
dic1 = {'a': 'string', 'b': 1, 'c': [2,4]}
dic2 = {'d': 3, 'e': 5}
dic1.update(dic2)
dic1 # 结果:{'a': 'string', 'b': 1, 'c': [2, 4], 'd': 3, 'e': 5}
update
方法改变了字典中元素位置,因此对于任何原字典中已经存在的键,如果传给update
方法的数据也含有相同的键,则它的值将会被覆盖:
dic1 = {'a': 'string', 'b': 1, 'c': [2,4]}
dic2 = {'a': 3, 'e': 5}
dic1.update(dic2)
dic1 # 结果:{'a': 3, 'b': 1, 'c': [2, 4], 'e': 5}
2.8 get方法
使用get(key, default_value)
时,如果key不是字典的键,会返回default_value,否则返回相应的值:
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic.get('a', 0) # 结果:'string'
dic.get('d', 0) # 结果:0
三、有效的键
尽管字典的值可以是任何Python对象,但键必须是不可变的对象,比如标量类型(整数、浮点数、字符串)或元组(且元组内对象也必须是不可变对象)。这里要使用到一个术语叫作哈希化,通过hash
函数可以检查一个对象是否可以哈希化(即是否可以用作字典的键):
hash('a') # 结果:-6424082397388798722
hash((1,2)) # 结果:-3550055125485641917
hash([1,2]) # 结果:TypeError: unhashable type: 'list'