python全栈-Day 5

一、字典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('您的输入有误,请重新输入
')
原文地址:https://www.cnblogs.com/txbbkk/p/9303040.html