概念
以 键值对 方式存储数据
列表和字典都是可变序列(可对内部进行增删改查)
不同元素的输入先后并不能决定最终存储先后,具体存储是由哈希函数返回值决定的
张三是键,100是值
字典特点
- 所有元素都是一个key-value对,key不能重复(key一旦重复,后面的值会覆盖掉前面的值),但是值可以重复。
print('---------覆盖同一个键--------------')
dic={"name":'mike',"name":'jack'}
print(dic)
- 字典元素无序
- 字典中的键必须是不可变对象,例如list就不能做key,key是字典中最关键的东西
- 字典可以根据需要动态伸缩
- 字典会浪费较大内存,属于是用空间换时间
创建
-
基本方法:使用大括号
scores={'张三':100,'李四':200,'王五':300,}
-
内置函数dict()
dict(name='mike',age=20)
,存储结果和上面一样:键值对(键:name和age;值:mike和20)
-
空字典
d={}
即可创建一个名为d的空字典
字典生成式
dict={name:age for name,age in zip(name,age)}
类似列表表达式,zip压缩两个列表,多次赋给变量name,age,前面name:age是键值对。
若两个列表长度不同,则以短的为个数
name=['mike','jack','sky','peter'] #创建两个可迭代对象
age=[20,19,18,17]
d={key:val for key,val in zip(name,age)}
print(d)
#将列表name和age一一对应,放进变量key,val中,再赋给键值对 key:val
也可以在key后面加上upper()使key变成大写
name=['mike','jack','sky','peter']
age=[20,19,18,17]
d={key.upper():val for key,val in zip(name,age)}
print(d)
获取字典元素
直接获取
print(s['name'])
若找不到,则直接报错
用get()获取键对应的:值
切记:字典中存储结构是键值对,且键要用引号包起来:
print(s.get('name'))
输出:mike
若找不到,则返回None
当然,我们还可以设定:如果找不到,返回自定义的值:
print(s.get('n','找不到'))
判断字典中有没有键(key)
切记,键要用引号包起来
print('name' in s)
输出:True
当然还有not in语句同样用法
删除键
print(s)
del s['name']
print(s)
删除name键值对
清空字典
删除字典所有键值对
print(s)
s.clear()
print(s)
增添,修改字典元素
s['sexy']='female'
使用赋值语句,对键赋值。
添加时key也要用单引号包起来
若字典中没有这个键,则增加进字典
若字典中存在这个键,则覆盖掉原有值
print(s)
s['sexy']='female'; #增加sexy
print(s)
s['sexy']='male'; #修改sexy
print(s)
获取字典内的值
获取字典中所有的键,值,键值对
s.keys()
获取所有key
keyword=s.keys()
print(keyword)
输出:dict_keys(['name', 'age'])
s.values()
获取所有value
val=s.values()
print(val)
输出:dict_values(['mike', 20])
s.items()
获取所有key,value对
item=s.items()
print(item)
输出:dict_items([('name', 'mike'), ('age', 20)])
以上操作返回的对象都可以进行列表化:
print(list(item))
每个红框被称为 “元组”
遍历字典
for 变量 in 字典:
print(变量) #输出字典的键
print(scores[变量]) #输出字典的值
只能直接找到key,val需要进一步get或者[ ]
输出字典的键,值(两种方法)
for i in s:
print(i ,s.get(i),s[i]) #输出键,值,值