1.dict的增删改查及初始化
1.1 dict的初始化
1.dict() 构造函数可以直接从键值对序列里创建字典
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}2.字典推导式可以从任意的键值表达式中创建字典
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}3.当关键字是简单字符串时,有时直接通过关键字参数来指定键值对更方便
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}1.2 dict的“增”
把数据放入dict的方法,除了初始化时指定外,还可以通过key直接放入:
>>> d = {}
>>> d['Adam'] = 67
>>> d['Adam']
671.3 dict的“删”
要删除一个key,用pop(key)方法(该函数返回值为key对应的value值),对应的value也会从dict中删除。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}也可以用del 来删除一个键值对。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> del d['Bob']
>>> d
{'Michael': 95, 'Tracy': 85}1.4 dict的“改”
可以通过key获取其value直接对其进行赋值
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Bob'] = 70
>>> d
{'Michael': 95, 'Bob': 70, 'Tracy': 85}1.5 dict的“查”
查询时若key不存在
:直接通过d[‘Thomas’]这种方式去获取该key对应的value会报错,要避免key不存在的错误,有两种办法,
一是通过in判断key是否存在:
>>> 'Thomas' in d
False二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1注意:返回None的时候Python的交互环境不显示结果
查询key,value
dic = {'name': 'chen', 'age': 25, 'loc': 'Tianjin'}# 字典的keys()、value()方法的返回值是对象,不是列表
# 以列表的形式返回key
list(dic.keys())
# 以列表的形式返回value
list(dic.values())
# 循环key
for key in dic:
print(key)
# 循环key
for key in dic.keys():
print(key)
# 循环value,用value()方法可以将所有value取出
for value in dic.values():
print(value)
# 当在字典中循环时,用items() 方法可将关键字和对应的值同时取出
for key, value in dic.items():
print(key, value)2.dict是无序的
对于dict的迭代需要注意的是:因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。(dict的标准规定
不保证
有顺序,要保证有顺序的请用OrderedDict)
from collections import OrderedDict
d = OrderedDict()关于dict无序这个问题的探讨,可以看看下面这篇,如果想深究,建议看一下源码,博主在这个地方没深究过。
https://www.zhihu.com/question/65855807
3.其他
需要牢记的第一条就是dict的key必须是不可变对象
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)
在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或append() 和extend() 之类的方法来改变。
















