7、python_dict(字典)
字典是python中唯一一个映射类型,它是以{}括起来的键值对组成.在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key_value保存在这个地址中,这种算法称为hash算法,所以,在dict中存储的Key-value中的key是必须是可以Hash的,hash具有雪崩效应,是不可变的,采用哈希算法是能够准确的计算内存地址而规定的
已知可哈希(不可变)的数据类型:int、str、tuple、bool
不可哈希(可以变)的数据类型:list、dict、set
语法:{key1:value1,key2:value2....}
注意:key必须是不可变的(可以hash)的;value没有要求,可以是任何类型的数据
dict = {'jay': '周杰伦', 'jj': '林俊杰','eason':'陈奕迅'} print(dict) #{'jay': '周杰伦', 'jj': '林俊杰', 'eason': '陈奕迅'}
字典的增删改查
- 增
dic = {"昆凌":"杰伦老婆"} dic['章子怡'] = "王峰老婆" #新增 print(dic) #{'昆凌': '杰伦老婆', '章子怡': '王峰老婆'} dic['章子怡'] = "威廉姆特单的老婆" #如果key重复了,会替换掉原来的key print(dic) #{'昆凌': '杰伦老婆', '章子怡': '威廉姆特单的老婆'} dic.setdefault("马蓉","王宝强的前妻") print(dic) #-{'昆凌': '杰伦老婆', '章子怡': '威廉姆特单的老婆', '马蓉': '王宝强的前妻'} dic.setdefault("马蓉","松泽的现任?") #如果字典中包含了这个key,setdefault将不起作用 print(dic) #{'昆凌': '杰伦老婆', '章子怡': '威廉姆特单的老婆', '马蓉': '王宝强的前妻'}
- 删
dic = {'jay': '周杰伦', 'jj': '林俊杰','eason':'陈奕迅'} dic.pop("jay") #删除周杰伦 print(dic) #{'jay': '周杰伦', 'jj': '林俊杰', 'eason': '陈奕迅'} dic = {'jay': '周杰伦', 'jj': '林俊杰','eason':'陈奕迅'} del dic["jay"] #删除周杰伦 print(dic) #{'jj': '林俊杰', 'eason': '陈奕迅'}
- 改
dic = {'jay': '周杰伦', 'jj': '林俊杰','eason':'陈奕迅'} dic1 = {"jay":"周洁轮","jj":"林俊杰","esaon":"成一询","vava":"王承泽"} dic.update(dic1) print(dic) #{'jay': '周洁轮', 'jj': '林俊杰', 'eason': '陈奕迅', 'esaon': '成一询', 'vava': '王承泽'}
- 查(一般是通过key来查找具体的数据)
dic = {'jay': '周杰伦', 'jj': '林俊杰','eason':'陈奕迅'} print(dic["jay"]) #周杰伦 print(dic.get("eason")) #陈奕迅 print(dic.get("剑圣")) #None dic.setdefault("及时雨","宋江") print(dic) #{'jay': '周杰伦', 'jj': '林俊杰', 'eason': '陈奕迅', '及时雨': '宋江'}
- 字典的常用操作
dic = {"及时雨":"宋江","小李广":"华荣","黑旋风":"李逵"} print(dic.keys()) #dict_keys(['及时雨', '小李广', '黑旋风']) for key in dic.keys(): print(key) #及时雨\小李广\黑旋风
print(dic.items()) #dict_items([('及时雨', '宋江'), ('小李广', '华荣'), ('黑旋风', '李逵')]) 拿到的是键值对
print(dic.items()) for item in dic.items(): print(item[0]) #及时雨\小李广\黑旋风 拿到的是key print(item[1]) #宋江\华荣\李逵 拿到的是value
- 字典的内置函数方法
cmp(dict1, dict2) 比较两个字典元素。 len(dict) 计算字典元素个数,即键的总数。 str(dict) 输出字典可打印的字符串表示。 type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 dict.clear() 删除字典内所有元素 dict.copy() 返回一个字典的浅复制 dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 dict.get(key,default=None) 返回指定键的值,如果值不在字典中返回default值 dict.has_key(key)- 如果键在字典dict里返回true,否则返回false dict.items() 以列表返回可遍历的(键,值)元组数组 dict.keys() 以列表返回一个字典所有的键 dict.setdefault(key,default=None)和get()类似,但如果键不已经存在于字典中,将会添加键并将值设为default dict.update(dict2) 把字典dict2的键/值对更新到dict里 dict.values() 以列表返回字典中的所有值