字典 dict:
1)字典介绍
字典是一个非序列容器
1.字典是一种可变的容器,可以存储任意类型的数据
2.字典中的每个数据都是用“键”key进行索引,而不是想序列(str,list,tuple)可以用整数下标进行索引
3.字典的数据没有先后的顺序关系,字典的存储是无序的
4.字典中数据以键"key"-值"value"对的形式进行存储
5.字典的key不可以重复,且只能用不可变的类型作为字典的键
2)字典的创建方式
1.创建字典的字面值方式:
字典的表示方式以“{ }”括起来,以冒号“:”分割键值对,各键值对之间用逗号隔开。
示例:
创建空字典:
d = {}
创建非空字典:
d = {"name":"Guisam","age":21,2:"two",3:[1,3]}
注:字典的键必须为不可变类型的值
2.创建字典的构造函数:
dict() #生成一个空的字典 等同于{}
dict(iterable) #用可迭代对象创建,但可迭代对象每个数据项必须拥有一对数据
dict(**kwargs) #关键字传参形式生成一个字典
dict(mapping) #通过mapping对象的key,value部分数据创建dict
示例:
itera = ([1,2],[2,4],'AB')
d = dict(itera) #d = {1: 2, 2: 4, 'A': 'B'}
d = dict(a = 1,n = '2') #d = {'a': 1, 'n': '2'}
#注意前面的key:a和n不能加引号'',此处为关键字传参,前面为变量名即key,后面为值
#用此方法无法创建key为整数型类型之类的字典,因为无法把一个常数作为一个变量名
eg:无法用此方法创建 d = {1:2},因为如果key要为“2”,用此方法则为d = { 1 = 2 } ,但字面值不能作为一个赋值运算的左侧
3.字典推导式;
字典推导式是用可迭代对象来创建字典的表达式
语法:
{键表达式:值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注:[]的内容可以省略
示例;
生成一个字典:键的值为0~9,值为键的平方
d = { x : x**2 for x in range(0,10)}
#d = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
字典推导式的嵌套:
语法同列表推导式嵌套
在前面我们讲元组时说了元组时不可变数据类型,而list和dict字典时可变的数据类型,那么关于python的可变数据类型有哪些的?
其实python自带的可变类型只有有四种:
list()/列表,dict()/字典,set()/集合,bytarray()/字节数组
注:除上四种其他均为不可变的数据类型,上面这四种类型永远不能作为字典的键
3)字典的基本操作:
1.字典的键索引
语法:
字典[键]
作用:
用键获取字典的键对应的值
示例:
d = {"name":"myname","age":15}
print(d[name]) #结果为:"myname"
2.添加和修改字典的元素:
添加字典元素
语法:
字典[key] = value
说明:
键不存在时,创建键,并让键绑定对应的值
键存在是,修改键绑定的值为value
示例:
d = {}
d["name"] = "myname" #添加一个键值对
d["age"] = 17 #添加一个键值对
d["age"] += 1 #修改key对应的值
删除字典元素:
del 语句
语法:
del 字典[key]
示例:
d = dict(name = "myname",age = 12)
del d['age']
print d #d = {"name":"myname"}
3.字典的键判断 in ,not in运算符
可以用 in 运算符判断一个键是否在字典中,如果存在返回True,否则返回False
not in 返回值与 in 相反
只能对key进行判断,无法判断value
字典的 in 与 not in运算要快于列表中的in ,not in运算
示例:
d = dict(name = "myname",age = 12)
"name" in d #True
12 in d #False
"age" not in d #False
4.字典的迭代访问
字典是可迭代对象,字典只能对键进行迭代访问
示例:
d = {0:“零”,2:“贰”,3:“叁”,8:“捌”}
for n in d:
print(n) #0,2,3,8
print(d[n]) #“零”,“贰”,“叁”,“捌”
注意:字典之间不支持 + * 比较等运算
5.可以用于字典的函数:(注意与该方法在list和tuple里对于字典的区别)
| 函数 | 作用 |
|---|---|
| len(x) | 返回字典的键值对的个数 |
| max(x) | 返回字典的键的最大值,要求所有的键值之间必须可以比较 |
| min(x) | 返回字典的键的最小值,其余同max |
| sum(x) | 返回字典的所有键的和,要求所有的键值之间必须可以求和 |
| any(x) | 真值测试,只对键进行测试,只要一个键为真值,则返回True |
| all(x) | 所有键为真值则返回True |
6.字典的方法:
| 方法 | 作用 |
|---|---|
| D.clear() | 清空字典 |
| D.pop(key) | 移除键,同时返回此键所对应的值 |
| D.copy() | 返回字典D的副本,只复制一层(浅拷贝) |
| D.update(D2) | 将字典 D2 合并到D中,如果键相同,则此键的值取D2的值作为新值 |
| D.get(key, default=None) | 返回键key所对应的值,如果没有此键,则返回default |
| D.keys() | 返回可迭代的 dict_keys 集合对象 |
| D.values() | 返回可迭代的 dict_values 值对象 |
| D.items() | 返回可迭代的 dict_items 对象 |
注:如果使用d[key]去获取相应的value时,如果此key不存在则会报错,所以可以用get()方法
示例:
#1.已知有如下字符串列表:
L = ['DAD','DA','FAFA']
#生成字典:d = {'DAD':3,'DA':2,'FAFA':4}
d = { x:len(x) for x in L}
#2.
Nos = [1001,1002,1005,1006]
names = ["Tom","Hers","Kada","UZI"]
#试生成字典:d = {1001: 'Tom', 1002: 'Hers', 1005: 'Kada', 1006: 'UZI'}
for i in range(0,4): #方法1
d[Nos[i]] = names[i]
d = {Nos[i]:names[i] for i in range(0,4)} #方法2
4)字典 VS 列表
1.都是可变的容器
2.索引方式不同,列表用整数索引,字典用键索引
3.列表的存储是有序的,字典的存储是无序的
4.字典的插入,删除,修改的速度可能会快于列表(重要)
5.字典的内部实现:hash表或者红黑树;列表的内部实现:动态数组

本文详细介绍了Python字典的基本概念,包括字典的非序列特性、键值对存储方式及键的不可变性。讨论了字典的创建、基本操作如添加、修改和删除元素,以及字典与其他容器(如列表)的区别。还提到了字典的迭代访问和相关函数,强调了字典在存储和查找速度上的优势。
1万+

被折叠的 条评论
为什么被折叠?



