-
以
key:value
的形式存多个值 -
优点:存取都快,每一个值都有对应的key
二、定义方式
-
在“{}”内以逗号分隔开多个元素
-
格式为
key:value
,其中key
必须为不可变类型,value
可以是任意类型 -
字典类型对应的“工厂”就是
dict
dic = { "name" : "淘小欣","age" : 18}背后的操作就是dic = dict(name = "淘小欣", age = 18)
三、数据类型转换
res= dict([('k1',1111),("k2",2222),("k3",3333)])print(res)res=dict(x=111,y=222,z=333)print(res).formkeys方法在下面“需要掌握的方法”里面详细介绍res={}.fromkeys(["name","age","gender"],None)
四、常用操作+内置方法
优先掌握的操作(*******)
-
按照key取值,可存可取
按 "key" 存一个值dic = { "name":"shawn"}dic["age"] = 22print(dic) #{'name': 'shawn', 'age': 22}也可以取值,改值dic["age"] = 18dic["name"] = dic["name"].upper()print(dic) #{'name': 'SHAWN', 'age': 18}
-
长度:
len()
-
统计的是key的个数
-
如果存在key相同的键值对,那么以后入的为主
以 "key" 来决定个数dic = { "name":"shawn","age":22,"sex":"man"}print(len(dic)) # 3有两个 "age", 以后面的为主(就相当于你后面修改了"age"的值一样)dic = { "name":"shawn","age":22,"sex":"man","age":18}print(dic) #{'name': 'shawn', 'age': 18, 'sex': 'man'}
-
-
成员运算
in
和not in
-
判断是不是字典的key
dic={ "name":"淘小欣","age":22,"sex":"man"}print("name" in dic) #Trueprint("age" not in dic) #False
-
-
删除
del、.pop()、.popitem
-
del : 直接删除”谁”, 通用万能删除, 它不支持赋值语法, 赋值会报错
-
.pop() : 根据 key 进行删除, 返回的值是 key 对应的 value
-
.popitem() : 无参数, 随机删除一个键值, 返回一个元组, 元组里第一个值是 key, 第二个值是对应的 value
"del"dic = { "name":"shawn","age":22,"sex":"man"}del dic["name"]print(dic) #{'age': 22, 'sex': 'man'}".pop", 会返回删除的 "value"res = dic.pop('age')print(res) #22print(dic) #{'sex': 'man'}".popitem"返回的值是元组, ("key", "value")dic = { "name":"shawn","age":22,"sex":"man"}res = dic.popitem()print(res) #('sex', 'man')print(dic) #{'name': 'shawn', 'age': 22}
-
-
取值:键.keys(),值.values(),键值对.items()
-
.keys() : 只取 key
-
.values() : 只取 value
-
.items() : 既取 key, 又取 value
-
以下加入 for 循环组合使用
dic = { "name":"shawn","age":22,"sex":"man"}".keys()"list=[]print(dic.keys()) #dict_keys(['name', 'age', 'sex'])for k in dic.keys(): list.append(k)print(list) #['name', 'age', 'sex']".values()"list2 = []print(dic.values()) #dict_values(['shawn', 22, 'man'])for v in dic.values(): list2.append(v)print(list2) #['shawn', 22, 'man']".items()"l1 = []; l2 = []print(dic.items()) #dict_items([('name', 'shawn'), ('age', 22), ('sex', 'man')])for k,v in dic.items(): l1.append(k) l2.append(v)print(l1) #['name', 'age', 'sex']print(l2) #['shawn', 22, 'man']
-
Python2 当中的 键 .keys( ), 值 .values( ), 键值对 .items( ) 直接是列表输出的结果,比较占空间,而Python3中像是一只老母鸡, 想要就取一个
"python2"中的字典取值>>> dic = { "name":"shawn","age":22,"sex":"man"}>>>>>> dic.keys()['name', 'age', 'sex']>>>>>> dic.values()['shawn', 22, 'man']>>>>>> dic.items()[('name', 'shawn'), ('age', 22), ('sex', 'man')]
-
-
.取值 .get( ) —>(寻找)
-
上面提到可以使用 “dic[key]” 这种方式取值, 但找不到会报错
-
.get() : 参数为 key, 找不到返回 None, 容错性更好
dic = { "name":"shawn","age":22,"sex":"man"}?"dic[key]"找不到报错res = dic["xxxx"]print(res) #报错?".get()"找到返回"value",找不到返回"None"res = dic.get("name")print(res) #shawnres = dic.get("xxxx")print(res) #None
需要掌握的操作()
1.更新 .update( )
-
更新就是键值对的修改或增加
-
就像一个软件, 新版本是在旧版本的基础上修改 BUG 或者增加功能
-
对与老字典来说,更新指的是 : 新字典中有而老字典中没有则添加,新有而老也有则覆盖
dic = { "name":"shawn","age":22}?修改了 "age", 增加了 "sex"res = dic.update({ "age":18,"sex":"man"})print(dic) #{'name': 'shawn', 'age': 18, 'sex': 'man'}
2.清空 .clear( )
dic = { "name":"shawn","age":22,"sex":"man"}dic.clear()print(dic) #{}
3.初始化(造)一个字典模板 .fromkeys( )
-
前一个参数是 key, 后一个参数是 value
-
语法 :
{}.fromkeys(['name','age','sex'],'xxxxxx')
?不使用 ".fromkeys" 建模板good_info={ 'name':None, 'price':None, 'count':None}?使用 ".fromkeys()" 建模板dic = {}.fromkeys(['name','age','sex'],None)print(dic) #{'name':None,'age':None,'sex':None}
-
示例
?使用 "for" 循环 list1=['name','price','count'] dic={} for x in list1: dic[x]=None print(dic) #{'name': None, 'price': None, 'count': None}?使用 ".fromkeys()" 直接实现dic = {}.fromkeys(list1,None)print(dic) #{'name': None, 'price': None, 'count': None}?加入商品信息'mac' 20000 10 #商品信息dic['name']='mac' #将商品信息加入到模板中dic['price']=20000 #价格dic['count']=10 #个数
4.添加并返回值 .setdefaul( )
-
如果字典里有要添加的 key, 则不修改, 并返回 key 对应的原 value
-
如果字典里没有要添加的 key, 则添加, 并返回添加的 key 对应的新 value
?添加存在的 "key"dic={ 'name':'shawn','age':22}res=dic.setdefault('name','SHAWN')print('返回值:',res) #返回值: shawnprint(dic) #{'name': 'shawn', 'age': 22}?添加不存在的 "key"res=dic.setdefault('sex','man')print('返回值:',res) #返回值: manprint(dic) #{'name': 'shawn', 'age': 22, 'sex': 'man'}
五.总结
-
可以存多个值
-
无序, 取值是按 “key” 取对应的 “value”
-
可变类型—>不可 hash 类型
-