认识字典:
用{}表示,每一项内容都是key:value, 每项数据之间用逗号隔开,key值是必须是唯一的,否则只能生效一个,value 可以是任何类型的值(唯一性,无序)
通过使用hash算法计算key的哈希值,在使用哈希值来存储数据,所以key值必须是不可变类型
不可变: 字符串, 元组, int, bool
可变的: list, dict, set
字典的添加和修改
1.info[键的名称] = 某个值 如果该键的名称在字典中已经存在了,那么就是修改该键的值,如果该键的名称不存在 ,那么就是添加该键到该字典中
dic['王者荣耀'] = '鲁班七号' #如果key是不存在的执行的就是添加的操作
dic['王者荣耀'] ='牛魔王' #如果key已经存在在字典中的话,执行的就是修#改的操作
2.dic.setdefault() 在setdefault 中先检测是否存在key,如果不存在,就新增,如果就不进行新增的操作,但是两者都会返回这个key的对应的value 值
3.dic.update(字典b变量) 将字典b的项添加到字典dic中,相当于列表中的extend
大概作用:如果在更新的时候,两个字典如果含有相同的key,key对应的值就会被更改,如果b中有但是dic中没有,该键值对会直接被添加,如果dic 中有,但是b中没有,那么key对应的值就不变
字典的删除(pop ,popitems,clear,del)
cc = dic.pop('王者荣耀') #返回的是key对应的值
dd = dic.popitem()#是随机删除的,返回的是键值对,
dic.clear() #直接清空字典
del dic[key] eg : del dic[‘王者荣耀’] #直接删除根键是‘王者荣耀’对应的键值对
字典的查询(dic[key],dic.get(key,’没有’),setdefault(key))
- 直接通过使用dic[key] 查询对应的值,存在的问题是,如果给出的key在字典中是不存在的,那么就会报错,
- 使用dic.get(key,‘没有找到的的返回值,默认返回None’)作用与上面的一样,只是如果在找不到的时候没有报错,并且可以手动设置没有找到的时候返回的值是什么
- setdefault(key) 具体作用与看上面添加的部分
直接循环字典的时候拿到的就是key
dic={'射手':'鲁班七号','刺客':'李白','坦克':'项羽'}
for i in dic:
print(i)
常用的字典遍历
方法1::
for i in dic:
print(i,dic[i]) 方法2:
for a,b in dic.items(): print(a,b)
字典的其他功能
1.根据序列创建字典,并指定统一的值
fromkeys 创建一个新的字典,其中包含指定的键,但每个键的值是none
dict.fromkeys([‘name’,’age’],‘这里是修改默认值’) 默认是所有的值都是none如果想要更改的话,通过上面的方式进行修改
以下的infor或者是info 都是字典的名称
infor = {‘age’:18,’name’:’panzhenwei’}
infor.keys() 查看字典的键在对象中通过类似列表的形式显示出来
infor.values() 查看字典的所有的值,全部列出
infor.items() 查看键——值,在对象中通过元组的方式显示出来
字典的copy
如果是使用c = info.copy() 只是浅复制,如果是替换原来的值得话,原字典不会受影响,如果是修改字典里面的值的话,连原来的字典都是会被修改的
c[‘age’] = 22 这个只是替换,原来的字典没有改变
c[‘name’].remove (chenweixian) 这样的话,连原来的字典都是会被修改的
通过from copy import deepcopy
先要进行浅复制c = date.copy()
d = deepcopy(c) 深度复制
简单数据库
a = {panzhenwei:{‘age’:18,’name’:panzhenwei}}
使用人名作为key 但值的话在嵌套一个字典