1.字典的表示:用大括号扩起来,键值对之间的元素用冒号连接(key:value)
例如:
di = {'a1':'123','b1':'456','c1':'789'}
此处,di中虽然有6个字符串,但是实际上di只有3个值,我们把'a1':'123'这种di里的值叫做
'键值对'(key:value)
其中,value部分可以使用任何值,也可以随意嵌套;而在key部分中,列表list,字典dict不能放在key里面,这和字典本身的运作方式有关(因为列表字典不能做哈希运算,所以不能作为key值)
最后要注意的是,
字典是无序的;无序的好处在于,
储存一大堆东西的时候,能快速的进行读取,很省时间
2.字典的增删改查及其它方法
a.增加
.fromkeys() (可迭代的序列,值) |
静态方法;根据一个可迭代的序列,将之作为key创建字典,并赋予一个统一的值values |
b.删除
del['a1'] |
通过索引(字典的索引是key)的方式删除键值对 |
.clear() |
删除指定字典中的所有元素 |
.pop() (指定的key,返回值) |
删除字典中的指定key;当指定key存在时,删除后返回对应的value;如不存在时,返回指定的返回值,如果不设置返回值且指定key也不存在的话则报错 |
.popitem() |
按python的顺序(随机)给字典删除元素,一次一个,返回的是被删除的键值对 |
.setdefault() (指定的key,指定的value) |
设置指定的键值对,如果指定的key已经存在则返回对应的value,如果不存在则将其添加进dict中并返回其value |
c.修改
.update() (任意键值对) #多个对用逗号隔开 |
更新dict中的键值对,如果有则更新,如果没有则添加 |
#此处键值对可以用'a1':'123'这种冒号分隔的形式也可以用等号分隔的形式,就不多做范例
d.查询
字典dict的查询方式和列表list以及元组tuple都不同,列表list以及元组tuple都可以通过简单的数字索引比如lst[0]以及切片来查询;但是字典就不一样,字典的索引是我们定义的key,例如print(di['a1']);而且因为字典dict是无序的,所以根本就不能通过切片的方式来查看字典
对于字典,因为key是创建的时候自定义的,所以while方法对字典来说无效,但是可以通过for循环把字典中的元素给输出出来
.keys() |
将指定字典中的key输出,返回值类型为'dict_keys',官方描述为'a set-like object' |
.values() |
将指定字典中的values输出,返回值类型为'dict_values' |
.items() |
将指定字典中的键值对输出,返回值类型为'dict_items' |
.get() (指定的key,返回值) |
查询字典中有无指定的key,如果有则输出对应的value,如果没有则输出指定的返回值,返回值默认为None |
#get()和索引查找的不同之处在于,索引查找当找不到的时候会报错而get()方法则不会报错
e.其它
浅复制是什么呢?就是,本来有字典
a = {'abc':'123','efg':'456'},在内存中,就是把a这个变量指向
{'abc':'123','efg':'456'}在内存中的地址,当我们做一个浅复制
b = a.copy()
时,并不是说
{'abc':'123','efg':'456'}做了一个新的副本,而是把b这个变量也指向了
{'abc':'123','efg':'456'},
也就是说a和b指向的是同一个内存地址
,这种复制叫浅复制