定义方式
定义:在{}内用逗号分隔开多元素,每一个元素都是key:value的形式,其中value可以是任意类型,而key则必须是不可变类型,详见第八小节,通常key应该是str类型,因为str类型会对value有描述性的功能

info={'name':'tony','age':18,'sex':'male'} #本质info=dict({....})
也可以这么定义字典
info=dict(name='tony',age=18,sex='male') # info={'age': 18, 'sex': 'male', 'name': 'tony'}

类型转换

# 转换1: 
>>> info=dict([['name','tony'],('age',18)])
>>> info
{'age': 18, 'name': 'tony'}

# 转换2:fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中
>>> {}.fromkeys(('name','age','sex'),None)  
{'age': None, 'sex': None, 'name': None}
# 数据类型转换dict
# info = dict(name='kevin',age ='23') #这样也是定义列表的方式,但是尽量不要这样定义,有点太小白
# print(info) #{'name': 'kevin', 'age': '23'},
# info = [['name','kevin'],['age',23]],   #列表转字典,只能写两个,因为一个列表里面是配对的,一般不会有人这样写
# print(info)

优先掌握的操作
按key存取值:可存可取

取
>>> dic = {
...     'name': 'xxx',
...     'age': 18,
...     'hobbies': ['play game', 'basketball']
... }
>>> dic['name']
'xxx'
>>> dic['hobbies'][1]
'basketball'
 对于赋值操作,如果key原先不存在于字典,则会新增key:value
>>> dic['gender'] = 'male'  
>>> dic
{'name': 'tony', 'age': 18, 'hobbies': ['play game', 'basketball'],'gender':'male'}
对于赋值操作,如果key原先存在于字典,则会修改对应value的值
>>> dic['name'] = 'tony'
>>> dic
{'name': 'tony', 'age': 18, 'hobbies': ['play game', 'basketball']}

1、长度len()

# 长度len()
# cc=len(dic)
# print(cc)   #3  ,字典的长度是按一个key一个长度算的

2、成员运算in和not in

>>> 'name' in dic  # 判断某个值是否是字典的key
True

3、删除

 del和pop的区别:
# (1)从性质上讲:
# del 是内置函数,pop()是类方法,
# pop()无参数时,默认删除最后一个数
# del根据索引删除列表元素,没有返回值
# pop根据索引弹出列表元素,并返回该元素,同时从列表中删除该元素
# # del dic['name'] #删除key和values
# print(dic)  #{'age': 26, 'hobbies': ['play game', 'basktebll']}
# dic.pop('name')#与del打印一致
# print(dic)

4、键keys(),值values(),键值对items()

>>> dic = {'age': 18, 'hobbies': ['play game', 'basketball'], 'name': 'xxx'}
# 获取字典所有的key
>>> dic.keys()  
dict_keys(['name', 'age', 'hobbies'])
# 获取字典所有的value
>>> dic.values()
dict_values(['xxx', 18, ['play game', 'basketball']])
# 获取字典所有的键值对
>>> dic.items()
dict_items([('name', 'xxx'), ('age', 18), ('hobbies', ['play game', 'basketball'])])
dic = {
    'name': 'kevin',
    'age': 26,
    'hobbies': ['play game', 'basktebll']

}
data=dic.items()
for k, v in data:
    print(k,v)#利用for循环把k和v 都取出来

5、循环

默认遍历的是字典的key
>>> for key in dic:
...     print(key)
... 
age
hobbies
name
只遍历key
>>> for key in dic.keys():
...     print(key)
... 
age
hobbies
name
只遍历value
>>> for key in dic.values():
...     print(key)
... 
18
['play game', 'basketball']
xxx
遍历key与value
>>> for key in dic.items():
...     print(key)
... 
('age', 18)
('hobbies', ['play game', 'basketball'])
('name', 'xxx')

需要掌握的操作
1.get()

dic = {
    'name': 'kevin',
    'age': 26,
    'hobbies':['play game','basktebll']

}
# print(dic['name'])  #按key取值
# dic['name']='zzz'   #根据key修改值,如果key存在就修改值,
# dic[123]=456    #如果key不存在就添加值
# print(dic)  #{'name': 'zzz', 'age': 26, 'hobbies': ['play game', 'basktebll'], 123: 456}
# dic['hobbies'][1]='111' #按照索引修改值
# print(dic)
# print(dic['hobbies'][1])    #按照索引取值
# print(dic.get('name'))#使用get取值,key不存在,不报错,返回none,
# print(dic.get('name1',666))     #key如果存在就就取出原来的值,key如果不存在,就取出第二个值
# ps:字典取值建议使用get方法

2.pop()

>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> v = dic.pop('k2')  # 删除指定的key对应的键值对,并返回值
>>> dic
{'k1': 'jason', 'kk2': 'JY'}
>>> v
'Tony'

3.popitem()

>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> item = dic.popitem()  # 随机删除一组键值对,并将删除的键值放到元组内返回
>>> dic
{'k3': 'JY', 'k2': 'Tony'}
>>> item
('k1', 'jason')

4.update()

# 用新字典更新旧字典,有则修改,无则添加
>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> dic.update({'k1':'JN','k4':'xxx'})
>>> dic
{'k1': 'JN', 'k3': 'JY', 'k2': 'Tony', 'k4': 'xxx'}

5.fromkeys()

>>> dic = dict.fromkeys(['k1','k2','k3'],[])
>>> dic
{'k1': [], 'k2': [], 'k3': []}

6.setdefault()

# key不存在则新增键值对,并将新增的value返回
>>> dic={'k1':111,'k2':222}
>>> res=dic.setdefault('k3',333)
>>> res
333
>>> dic # 字典中新增了键值对
{'k1': 111, 'k3': 333, 'k2': 222}

# key存在则不做任何修改,并返回已存在key对应的value值
>>> dic={'k1':111,'k2':222}
>>> res=dic.setdefault('k1',666)
>>> res
111
>>> dic # 字典不变
{'k1': 111, 'k2': 222}