一、字典dict初始
1、字典是Python中唯一的一个映射数据类型,由键(key)值(value)对组成
2、数据类型划分:可变数据类型(list、dict、set(集合))--不可哈希,不可变数据类型(int、str、tuple、bool)--可哈希
3、其中set(集合) 只有本身可变,集合的元素不可变
4、字典的key必须是不可变数据类型,字典的value可以是任意类型
5、字典的优势:
- 列表是按照顺序轮询查找,字典是二分查找,比较快速(比如 猜数字)
- 储存大量的关系型数据
- 特点:字典是无序,没有索引的(3.5及其之前的版本),3.6增加了一个新的特性,可以有序
dic = { 'name':['wangjing','xiao','xiaoxi'], 'py9':{'num':71, 'ave_age':23}, (1,2,3):'wuyuyu', 2:'haha', True:1 } print(dic)
二、字典dict的增删改查
#增 dic = {'name':'wangjing','age':18,'sex':'girl'} dic['height'] = 155 #没有的键值对,直接复制添加 dic.setdefault('weight') #没有的键值对,直接添加;默认value为None dic.setdefault('weight',150) #已有的键值对,不做操作 #删 dic = {'name':'wangjing','age':18,'sex':'girl'} dic.pop('sex') #按照键值删除,删除不存在的键则会报错 dic.pop('haha',None) print(dic.pop('haha',None)) #可设置返回值,删除不存在的键会输出返回值,删除存在的键会输出其value print(dic) dic = {'name':'wangjing','age':18,'sex':'girl'} dic.popitem() #删除最后一个键值对(3.5及其之前版本为随机删除,因为它是无序的) print(dic.popitem()) #返回值为删除的键值对的元组格式 print(dic) dic = {'name':'wangjing','age':18,'sex':'girl'} dic.clear() #清空字典 print(dic) dic = {'name':'wangjing','age':18,'sex':'girl'} del dic['name'] #删除 print(dic) #改 dic = {'name':'wangjing','age':18,'sex':'girl'} dic1 = {'name':'wangxiao','age':20,'height':175} dic['age'] = 20 #没有的键值对,值被覆盖 dic1.update(dic) #将参数dic的字典的所有键值对覆盖更新到 dic1中(有则更新,无则添加) print(dic) print(dic1) #查 dic = {'name':'wangjing','age':18,'sex':'girl'} print(dic['name']) #通过key查询,如果key不存在则会报错 print(dic.keys(),type(dic.keys())) #返回值类型为dict_keys类型,可以当成列表使用 print(dic.values(),type(dic.values())) #返回值类型为dict_values类型,可以当成列表使用 print(dic.items(),type(dic.items())) #返回值类型为dict_items类型,可以当成元组使用 dic = {'name':'wangjing','age':18,'sex':'girl'} for i in dic: print() #默认打印键 for i in dic.keys(): print(i) #默认打印键 for i in dic.values(): print(i) #默认打印值 for i in dic.items(): print(i) #默认打印键值组成的元组 dic = {'name':'wangjing','age':18,'sex':'girl'} print(dic.get('name')) #通过key查询,如果key不存在则会输出None print(dic.get('name1','此键不存在'))
三、字典dict的其他使用方法
1、python存储的内容有:内存地址及存储值+名称空间(名称和空间的指向关系)
#面试题 a,b = 1,2 print(a,b) a,b = [1,2] print(a,b) a,b = [[1,2],(3,4,5)] print(a,b,type(a),type(b)) a,b = b,a #一行代码交换a,b的值 print(a,b)
2、以上面试题结合字典 扩展使用
dic = {'name':'wangjing','age':18,'sex':'girl'} for k,v in dic.items(): print(k,v) #用两个变量分别接收字典的key和value
四、dict嵌套
dic = { 'name':['alex','wusir','wangjing','taibai','汪晓'], 'py9':{ 'begin_time':'1213', 'money':500, 'time':30, 'address':'浙江杭州' }, 'age':21 } dic['age'] = 56 dic['name'].append('haha') dic['name'][2] = dic['name'][2].upper() dic['py9']['girls'] = 5 print(dic)
课后作业
#一个字符串中,有多少个数字 info = input('>>>') #afs1fdfh23fg65h1jhg1235435 for i in info: if i.isalpha(): info = info.replace(i,' ') print(info) l = info.split() s = ''.join(l) print(len(s))
''' 1、如下值,li = [11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将所有小于66的值保存到第二个key中 ''' # li = [11,22,33,44,55,66,77,88,99,90] # dic = {} # big = [] # small = [] # # for i in li: # if i > 66: # big.append(i) # elif i < 66: # small.append(i) # else: # continue # dic.setdefault('k1',big) # dic.setdefault('k2',small) # print(dic) ''' 2、输出商品列表,用户输入序号,显示用户选中的商品 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] 要求:1:页面显示 序号 + 商品名称,如: 1 手机 2 电脑 … 2: 用户输入选择的商品序号,然后打印商品名称 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 4:用户输入Q或者q,退出程序。 ''' # li = ["手机", "电脑", '鼠标垫', '游艇'] # goods = {} # for i in range(len(li)): # print(i + 1, li[i]) # goods[i+1] = li[i] # while 1: # buy_goods = input('请输入您想要购买的商品序号:') # if buy_goods == '1': # print(goods[1]) # elif buy_goods == '2': # print(goods[2]) # elif buy_goods == '3': # print(goods[3]) # elif buy_goods == '4': # print(goods[4]) # elif buy_goods.upper() == 'Q': # break # else: # print('您的输入有误,请重新输入') # print(goods) li = ["手机", "电脑", '鼠标垫', '游艇'] for i in li: print('{} {}'.format(li.index(i)+1,i)) #print(li.index(i)+1,i) while 1: buy_goods = input('请输入您想要购买的商品序号:') if buy_goods.isdigit() == True and int(buy_goods) > 0 and int(buy_goods) <= len(li): print(li[int(buy_goods)-1]) elif buy_goods.upper() == 'Q': break else: print('您的输入有误,请重新输入 ')