Python中的字典
1 字典的定义
-
dictionary
(字典) 是 除列表以外Python
之中 最灵活 的数据类型 -
字典同样可以用来 存储多个数据
-
通常用于存储 描述一个
物体
的相关信息
-
-
和列表的区别
-
列表 是 有序 的对象集合
-
字典 是 无序 的对象集合
-
-
字典用
{}
定义 -
字典使用 键值对 存储数据,键值对之间使用
,
分隔-
键
key
是索引 -
值
value
是数据 -
键 和 值 之间使用
:
分隔 -
键必须是唯一的
-
值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
-
xiaoming = {"name": "小明", "age": 18, "gender": True, "height": 1.75}
2 字典常用操作
-
在
ipython3
中定义一个 字典,例如:xiaoming = {}
-
输入
xiaoming.
按下TAB
键,ipython
会提示 字典 能够使用的函数如下:
In [1]: xiaoming.
xiaoming.clear xiaoming.items xiaoming.setdefault
xiaoming.copy xiaoming.keys xiaoming.update
xiaoming.fromkeys xiaoming.pop xiaoming.values
xiaoming.get xiaoming.popitem
字典内置函数&方法
Python字典包含了以下内置函数:
序号 | 函数及描述 | 实例 |
---|---|---|
1 | len(dict) 计算字典元素个数,即键的总数。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> len(dict) 3 |
2 | str(dict) 输出字典,以可打印的字符串表示。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> str(dict) "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}" |
3 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> type(dict) <class 'dict'> |
Python字典包含了以下内置方法:
序号 | 函数及描述 |
---|---|
1 | radiansdict.clear() 删除字典内所有元素 |
2 | radiansdict.copy() 返回一个字典的浅复制 |
3 | radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | key in dict 如果键在字典dict里返回true,否则返回false |
6 | radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | radiansdict.keys() 返回一个迭代器,可以使用 list() 来转换为列表 |
8 | radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | radiansdict.values() 返回一个迭代器,可以使用 list() 来转换为列表 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 随机返回并删除字典中的最后一对键和值。 |
3 循环遍历
-
遍历 就是 依次 从 字典 中获取所有键值对
# for 循环内部使用的 `key 的变量` in 字典 for k in xiaoming: print("%s: %s" % (k, xiaoming[k]))
提示:在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多
4 应用场景
-
尽管可以使用
for in
遍历 字典 -
但是在开发中,更多的应用场景是:
-
使用 多个键值对,存储 描述一个
物体
的相关信息 -
将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理
-
card_list = [{"name": "张三", "qq": "12345", "phone": "110"}, {"name": "李四", "qq": "54321", "phone": "10086"} ]
5 常用方法
clear()
dict = {'Name': 'Zara', 'Age': 7} print ("字典长度 : %d" % len(dict)) dict.clear() print ("字典删除后长度 : %d" % len(dict)) # 字典长度 : 2 # 字典删除后长度 : 0
copy()
dict1 = {'user': 'runoob', 'num': [1, 2, 3]} dict2 = dict1 # 浅拷贝: 引用对象 dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用 # 修改 data 数据 dict1['user'] = 'root' dict1['num'].remove(1) #实例中 dict2 其实是 dict1 的引用(别名),所以输出结果都是一致的,dict3 父对象进行了深拷贝,不会随dict1 修改而修改, # 子对象是浅拷贝所以随 dict1 的修改而修改。 # 输出结果 print(dict1) print(dict2) print(dict3) # {'user': 'root', 'num': [2, 3]} # {'user': 'root', 'num': [2, 3]} # {'user': 'runoob', 'num': [2, 3]}
fromkeys()
seq = ('name', 'age', 'sex') dict = dict.fromkeys(seq) print("新的字典为 : %s" % str(dict)) dict = dict.fromkeys(seq, 10) print("新的字典为 : %s" % str(dict)) # 新的字典为 : {'name': None, 'age': None, 'sex': None} # 新的字典为 : {'name': 10, 'age': 10, 'sex': 10}
get()
dict = {'Name': 'Runoob', 'Age': 27} print ("Age 值为 : %s" % dict.get('Age')) print ("Sex 值为 : %s" % dict.get('Sex', "NA")) # Age 值为 : 27 # Sex 值为 : NA
in
dict = {'Name': 'Runoob', 'Age': 7} # 检测键 Age 是否存在 if 'Age' in dict: print("键 Age 存在") else: print("键 Age 不存在") # 检测键 Sex 是否存在 if 'Sex' in dict: print("键 Sex 存在") else: print("键 Sex 不存在") # not in # 检测键 Age 是否存在 if 'Age' not in dict: print("键 Age 不存在") else: print("键 Age 存在") # 键 Age 存在 # 键 Sex 不存在 # 键 Age 存在
items()
dict = {'Name': 'Runoob', 'Age': 7} for k,v in dict.items(): print(f'键值:{k},value值:{v}') # 键值: Name, value值: Runoob # 键值: Age, value值: 7
keys()
dict = {'Name': 'Runoob', 'Age': 7} ls = dict.keys() print(list(ls)) # ['Name', 'Age']
dict = {'Name': 'Runoob', 'Age': 7} print("Age 键的值为 : %s" % dict.setdefault('Age', None)) print("Sex 键的值为 : %s" % dict.setdefault('Sex', None)) print("新字典为:", dict) # Age 键的值为 : 7 # Sex 键的值为 : None # 新字典为: {'Name': 'Runoob', 'Age': 7, 'Sex': None}
update()
dict = {'Name': 'Runoob', 'Age': 7} dict2 = {'Sex': 'female'} dict.update(dict2) print("更新字典 dict : ", dict) #更新字典 dict : {'Name': 'Runoob', 'Age': 7, 'Sex': 'female'}
values()
dict = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'} print("字典所有值为 : ", list(dict.values())) #字典所有值为 : ['female', 7, 'Zara']
pop()和popitem()
dict = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'} dict.pop('Age') print(dict) #{'Sex': 'female', 'Name': 'Zara'} dict.popitem() print(dict) #{'Sex': 'female'}