字典
dict = {key1:value1, key2:value2, ...}
定义一个空字典
- em_dict = dict()
- em_dict = {}
字典的特性
- 可能存在多个相同的value(可重复), 但是key绝对是唯一存在的!
- 字典不支持下标/索引和切片, 字典是通过key(键)来访问的
查找字典数据
- dict[key]
- 这种访问方式, 如果key不存在, 会直接报错
- dict.get(key)
- 这种方式, 如果key不存在, 不会报错, 而是返回 None
- dict.get(key, default)
- 这种方式更细致, 如果key不存在, 不会返回 None, 而是返回默认值 default
修改和添加字典数据
- dict[key] = value
- 如果key存在, 做修改操作
- 如果key不存在, 在末尾做添加操作
- dict.update({key:value, ...})
- 这种方法是用字典型的数据去做添加修改操作
- 如果key存在, 做修改操作
- 如果key不存在, 在末尾做添加操作
删除字典数据
- 删除指定元素(键值对)
- del dict[key]
- dict.pop(key)
- 删除整个字典
- del dict
- dict.clear()
字典的长度
- 长度就是键值对的个数
- len(dict)
返回包含字典中所有key值的一个列表
- dict.keys()
返回包含字典中所有value值的一个列表
- dict.values()
返回包含字典中所有键值对元组的一个列表
- 列表中的元素形如 (key, value)
- dict.items()
遍历字典
- 直接遍历(也就相当于只遍历key值)
- for key in dict:
- 遍历字典的key值
- for key in dict.keys():
- 遍历字典的value值
- for value in dict.values():
- 遍历字典中的的元素(键值对)
- for item in dict.items():
- 一定要注意了, 此处返回值是元组类型的 (key, value)
- 遍历字典中的key,value键值对:
- for key, value in dict.items():
- 注意, 此处相当于一个元组的拆包操作, 把(key, value)拆出来给key和value变量
关于有序字典和无序字典
既然字典没有下标去定位顺序, 那么自然有个疑问, 字典中的元素是有序地存放着的吗??
其实字典这个容器分为有序字典和无序字典, 在Python3.6版本之后, 我们创建的dict默认就是有序字典
而在3.6版本之前, 我们创建的dict则默认是无序字典, 无序字典的特点是:每次访问, 字典中元素的顺序是随机的!
那么问题来了, 如果想在3.6之前的版本环境下创建一个有序字典怎么办呢??
from collections import OrderedDict
my_dict = OrderedDict() # 创建一个有序字典
但是即使3.6版本后的字典中元素是默认有序的存放的, 但是, 注意但是, 字典这种类型的容器在归类上是属于无序的数据类型的!!!
那么, 这个数据类型的有序和无序是怎么看的呢?
主要还是看能不能用下标索引出来,
比如: 字符串, 元组 和 列表 这仨就是有序数据类型
而: 字典 和 集合 这俩就是无序的
也可以这么理解, 字典这种数据类型在绝大多数编程语言中都是无序的;
只不过python3.6版本后做了个数据类型的小优化, 让字典内部的元素有序地进行存放;
但是这并无法改变字典这种数据类型的本质, 综上所述字典是一种无序数据类型!