字典是一种key-value的数据类型,字典里必须写Key和value,字典的优点是取数方便和速度快。
字典的特性:
      1.字典是无序的,因为它没有下标,用key来当索引,所以是无序的
      2.字典的key必须是唯一的,因为它是通过key来进行索引的,所以key不能重复,天生就去重

一、创建字典,字典的定义使用大括号{ },每个值用“,”隔开,key和value使用“:”分隔。



dict = {'name':'张凯','sex':'男','address':'火星','age':'180'}



二、字典的增删改查
2.1  新增



dict['phone']=17700000000    #增加一对key,value,如果key存在的话,会修改原来key对应的value值

dict.setdefault('name','xiao')   #如果key存在的话,并不会修改key对应value的值,只能新增



2.2  删除



dict.pop('name')  #指定key来删除

dict.popitem()   #随机删除一个key

del dict['phone'] #指定key来删除

dict.clear()   #清空字典



2.3  修改



dir ={'a':'b'}

dict.update(dir)  #合并字典,把dir字典的元素加入都dict字典中,更新字典值,如果key存在的话,就更新value,不存在就添加

dict['name']='xiao'  #如果key存在的话,会修改原来key对应的value值



2.4  查询



print(dict.get('name'))  #取不到key的话,会返回None

print(dict.get('yy','小黑'))  #如果取不到这个key的话,默认就是小黑

print(dict['yy'])  #如果key不存在,会报错



2.4.1  字典的内置方法



print(dict.keys())#获取字典所有的key

print(dict.values())#获取到字典所有的value

print(dict.items())#获取字典所有的key 和value

print(dict.update(new_infos))#更新字典值,如果key存在的话,就更新,不存在的话就添加



print(dict.items())   #输出一个list格式(非真正意义上的list)
#打印结果:
dict_items([('name', '张凯'), ('sex', '男'), ('address', '火星'), ('age', '180')])

print(list(dict.items()))  #把字典的key 和 value 转成一个多维list
#打印结果:
[('name', '张凯'), ('age', '180'), ('address', '火星'), ('sex', '男')]



实例如下:



people = {
    'ff':{
        'age':18,
        'money':100,
        'clothes':'10套'
        'hzp''n多',
        'shose':['nike','addise','lv','chanle']

    },
    'rr':{
        '金库':'100W',
        'house':['三环','四环'],
        'cars':{
            'japan':['普拉多','兰德酷路泽'],
            'usa':['林肯','凯迪拉克','福特'],
            'china':['五菱宏光','qq','红旗']

        }
    }
}

print(people['rr']['cars']['china'][1])  #取值QQ

print(people['ff']['age'])  #取值age

a= people['ff']['shose']=('牧马人')  #在ff的shose里增加牧马人

b = people['ff']['shose'].append('牧马人2')

print(people['ff']['shose'])



三、循环字典
直接循环一个字典的话,那么循环的是字典的key



for p in people:
     print(p)



循环的时候,同时取key和value



for k,v in people.items():  #循环的时候,同时取key和value

    print(k,'===>',v)



字典里面用in来判断的话,只是判断key是否存在



users ={
    'niuhanyang':'123456',
    'xiaohei':'654321'
}

print('123456' in users)  #字典里面用in来判断的话,只是判断key是否存在

#打印结果:False



四、字典的排序



d ={'a':4,'b':2,'c':3}

#字典是无序的,直接对字典排序是不存在的

print(d.items())  #结果是一个二维数组

res = sorted(d.items(),key=lambda x:x[1])
         #sorted排序是根据key来排序

print(res)

for k,v in res:

    print(k,v)



 
五、修改字典的key
方法:先删除原键值对,保存值,然后以新键插入字典
格式:dict[nwekey]=dict.pop(key)



dic = {'id':1, 'xingming':"张三"}
dic['name'] = dic.pop('xingming')

print(dic)
#输出:{'id': 1, 'name': '张三'}



执行语句:dict.pop('xingming')是删除 'xingming'所对应的键值对,返回 'xingming'对应的值;d['b'],相当于给字典新添加一个key,其value为d.pop('xingming')返回的值。



dic = {'id':1, 'xingming':"张三"}
value=dic.pop('xingming')

print(value)
#输出:张三



5.1 循环删除字典里的键值对



lis = [{'id':1, 'name':"张三"},{'id':2, 'name':"张三"}]
for key,Indic in enumerate(lis):
        for k in list(Indic.keys()):
            if k=='id':
                Indic.pop('id')
print(lis)
#输出:[{'name': '张三'}, {'name': '张三'}]



 

六、字典小练习



for i in range(3):
    username = input('账号:').strip()
    passwd =input('密码:').strip()
    cpasswd =input('再次输入密码').strip()
    if username == '' or passwd == '':
        print('用户名密码不能为空')
    elif username in users:
        print('用户名已经被注册!')
    elif passwd != cpasswd:
         print('两次密码不一致')
    else:
        print('恭喜注册成功!')
        users.setdefault(username,passwd)
        #users[username]=passwd
         break
 else:
     print('错误次数过多')
 print(users)