python数据类型 字典 dictionnary(无序)
字典dic什么是字典: 字典是一种可变的容器, 可以存储任意类型的数据 字典中的每一个数据都是用键进行索引的,而不像序列可以用下标 (index) 来进行索引 字典中的数据没有先后的顺序关系, 字典的存储是无序的 字典中的数据以键(key)-值(value)对的形式进行映射存储 字典的键不能重复, 具只能用 “不可变类型” 作为字典的键字典的字面值的表示方式:
什么是字典:
字典是一种可变的容器, 可以存储任意类型的数据
字典中的每一个数据都是用键进行索引的,而不像序列可以用下标
(index) 来进行索引
字典中的数据没有先后的顺序关系, 字典的存储是无序的
字典中的数据以键(key)-值(value)对的形式进行映射存储
字典的键不能重复, 具只能用 “不可变类型” 作为字典的键
字典的字面值的表示方式:
字典的表示方式以{}括起来, 以冒号(:) 分割键 -值对,各键-值对之间用逗号分隔开
创建空字典:
d = {} #d 绑定空字典
创建非空字典:
d = {'name':"tarena", "age":16}
d1 = {'year':2018, "month":3, "day":1}
字典的构造函数dic
dic() 生成一个空字典, 等同于{}
dic(iterable) 用可迭代对象初始化一个字典
dict(**kwargs) 用命名关键字传参形式生成一个字典
d = dict()
d = dict([('name','tarena'),('age',15)])
0d = dict(name ='tarena',age=22)
字典的键为不可变类型:
(数字类型),str, tuple, frozenset(固定集合)
bytes(字 节串)(后面会讲)
包括:None
可变的类型:
list, dictionnary, set(集合), bytearray(字节数组)(后面会讲)
字典的基本操作:
键索引:
语法:
字典[键]
示例:
>>> d ={'name':'tarena', 'age':15}
>>> d['name']
'tarena'
>>> d['age']
15
添加/修改字典元素:
字典[键] = 值对象
示例:
d = {}
d['birthday'] = (2002, 1, 1) #添加键值对
d['age'] = 16 # 添加
d['age'] = 17 # 修改‘age'键所对应的值
删除字典元素del语句
语法:
del 字典[键]
示例:
d ={'name':'tarena', 'age': 12}
del d['age'] #删除’age'这个键
操作数据: 增删改查
dic 是无序,并且以键值对来存储的容器
字典的成员资格判断 in / not in 运算符
in 运算符可以判断一个键是否存在于字典中, 如果存在则返回True, 否则返回返回False
not in 返回值与 in 相反
in not in
只能判断键 不能判断值
示例:
d = {1:"一", 2: "二",}
1 in d #True
2 in d #True
2 not in d #False
8 not in d #True
8 in d #False
'一' in d #False
字典有一个特征就是: 用键来访问数据的时候特别的快,不管是数据增加多少个
访问的时间也不会改变
特性: 用键访问访问的数据的时候特别的块,不管数据是增加多少访问时间也不会变
而list访问的时间却会因为列表中的元素的增加而增加
列表in 运算符和字典的运算符比较
1. 列表的in 运算符计算时间会因列表中的元素个数的增加而增加
L = [3, 7, 8, 10, 11, ........, 11111] #大约有十万个
if 888 in L:
print("888在列表里") #慢
列表 in
2. 字典的in运算符计算时间不会因键值对的个数增加而增加, 操作速度快于列表
d = {3: None, 6: "xx", 0:None, ........10886:None}
if 888 in d:
print("888在字典里键")
哈希存储()
散列表( )
3.字典的迭代访问:
容器是可迭代对象,字典只能对键进行迭代访问:
d = {"name":"泪儿超", "age" = 11, "birthday":(2018,2,2)}
for k in d:
print(k)
可以用于字典的內建(built-in)函数:
len(x) 返回字典键值对的个数
max(x) 返回字典键的最大值
min(x) 返回字典键的最小值
sum(x) 返回字面所有键的和
any(x) 对所有键进行真值测试, 有一个为True 结果为True
all(x) 对所有键进行真值测试, 所有为True才True
字典的方法(emthod)
values的访问必须用keys 来访问
D代表字典对象
D.clear() 清空字典
D.pop(key) 移除键,同时返回此键所对应的值
D.copy() 返回字典D的副本,只复制一层(浅拷贝)
D.update(D2) 将字典 D2 合并到D中,如果键相同,则此键的值取D2的值作为新值
D.get(key, default) 返回键key所对应的值,如果没有此键,则返回default
D.keys() 返回可迭代的 dict_keys 集合对象
>>> for k in d1.keys():
... print(k)
...
1
2
3
4
D.values() 返回可迭代的 dict_values 值对象
>>> for v in d1.values():
... print(v)
...
one
2
three
thd
D.items() 返回可迭代的 dict_items 对象
>>> for k,v in d1.items():
... print(k,v)
...
1 one
2 2
3 three
4 thd
>>> 字典推导式:
作用:
用可迭代对象生成字典:
语法:
{键表达式: 值表达式 for 变量 in 可迭代对象[if 真值表达式]}
示例:
#生成一个字典, 键为十以内的数字,值为键的平方
d = {x: x**2 for x in range(1,10)}
d = {x:x ** 2 for x in range(1, 10)}
no = [1001, 1002, 1003, 1004]
names = ['Tom','Jerry','Spike','Tyke']
用no中的编码作为键, names中的字符串作为值, 生成相应的字典
字典 VS 列表:
1. 都是可变的对象
2. 索引方式不同, 列表用整数索引, 字典用键索引
3. 字典的查找速度可能会快于列表(重要)
4. 列表的存储是有序的, 字典的存储是无序的
更多推荐
所有评论(0)