一、字典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('{}\t{}'.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('您的输入有误,请重新输入\n')