字典:python
基础数据类型之一,{}以键值对的形式存储数据。 dic = {'name':'Laonanhai','age':45} 以Key:value形式,映射,存储的大量的关系型数据。 关系型数据:
dic = {'name':'laonanhai',
'age':'45',
'name_list':['反面教材','俊俊',...]
}
数据类型的分类 可变(不可哈希hash): 不可变(可哈希hash): 容器类: 容器类的数据类型:list,tuple,dict,l1 =[11,22,33,[44,55]] 非容器类的数据类型;str,int,bool.s1 = '[11,22,33]' 字典的key必须是不可变的数据类型,是惟一的 hash算法: 字典的键经过hash表转换成数字,采用二分查找查询数字。 字典的value能够是任意数据类型。 字典的查询速度很是快,存储的大量的关系型数据。 字典在python3.5包含3.5以前都是无序,但3.6以后是有序的 。
键惟一:git
dic = { 'name' = 'alex'
'name'='Wusir' } print(dic) 字典的键必须是不可变得可哈希的数据类型: dic = { 'name' : 'alex' [1,2,3] : 'values', } print(dic) #报错 键必须是不可变的
字典的增删改查:算法
增 1. 有则覆盖,无则添加
dic = {'name':'老男孩','age':56,'hobby':'women'} dic['sex'] = 'LaddyBoy'
print(dic) # (在后面追加)
dic['name'] = 'Alex'
print(dic) 有则覆盖,没有就添加 {'name': 'Alex', 'age': 56, 'hobby': 'women'}
2.setdefault有则不变,无则添加
dic = {'name':'老男孩','age':56,'hobby':'women'} setdefault('sex') print(dic) 有键没有值(None)不报错 dic.setdefault('sex','Laddboy') print(dic) dic.setdefault('name','alex') print(dic) 有则不变,无则添加 {'name': '老男孩', 'age': 56, 'hobby': 'women'}
删 1,POP 按键删 有返回值,返回的是键对应的值
dic = {'name':'老男孩','age':56,'hobby':'women'} print(dic.pop('age')) #(56)有返回值,返回的是键对应的值
print(dic.pop('age1','没有此键...'))
2.clear() 清空字典
dic = {'name':'老男孩','age':56,'hobby':'women'} dic,clear print(dic)
3.popitem 随机删除,有返回值,返回值为元组,里面是删除的键值对
dic = {'name':'老男孩','age':56,'hobby':'women'} print(dic.popitem()) #随机删除,有返回值,返回值为元组,里面是删除的键值对
print(dic)
4.del
1,删除整个字典(在内存级别删除)
dic = {'name':'老男孩','age':56,'hobby':'women'} del dic
2.按照键删除键值对
dic = {'name':'老男孩','age':56,'hobby':'women'} del dic['name'] print(dic)
改 1.有则覆盖,没有就添加
dic = {'name':'老男孩','age':56,'hobby':'women'} dic['name'] = 'Alex' #有则覆盖,没有就添加
print(dic)
2.update两个字典的更新
dic = {'name':'jin','age':18,'sex':'male'} dic2 = {'name':'alex','weight':75} dic2.update(dic)#将dic里面的全部键值对覆盖添加到dic2中,dic不变
print(dic) #{'name':'jin','age':'18','sex':'male'}
print(dic2)#{'name':'jin','weight':'75','age':'18','sex':'male'}
查 1.利用键去查(无此键报错)
dic = {'name':'老男孩','age':56,'hobby':'women'} dic['name'] print(dic['name']) #(老男孩)
2.get (无此键默认返回None,可设置返回值)m
dic = {'name':'老男孩','age':56,'hobby':'women'} dic.get('name') print(dic.get('name')) print(dic.get('name1')) print(dic.get('name1','sb没有此键'))
3.for循环查询
dic = {'name':'老男孩','age':56,'hobby':'women'} dic.keys(), dic.values(), dic.items() #相似于list但不是list的类型,没有索引。可遍历。
print(dic.keys(),type(dic.keys())) for key in dic.keys(): print(key) l_key = list(dic.keys()) print(l_key) for value in dic.values(): print(value) l_value = list(dic.values()) print(l_value) print(dic.items()) k,v = ('name', '老男孩') for k,v in dic.items(): # [('name', '老男孩'), ('age', 56), ('hobby', 'women')]
print(k,v)
分别赋值概念 a, b = 1, 2 a, b = ('alex', '34') a, b = ['alex', '34'] 有 以下 a = 1 b = 3,用一行代码将a b值互换。 a = 1 b = 3 a, b = b, a print(dic.items()) for i in [22,33,44]: print(i) for i in [(11,22),(33,44),(55,66)]: print(i)
字典的嵌套
dic = { 'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': { 'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头'], } } 1,给dic添加一个键值对,学校:老男孩 dic['学校'] = '老男孩'
print(dic) #{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}, '学校': '老男孩'}
2,将status对应的值改为True dic['status'] = True print(dic) {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': True, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}} 3,给name_list对应的列表追加一个元素:平平 print(dic['name_list']) dic['name_list'].append('平平') print(dic) ['碗蓉', '俊俊', '爽妹'] {'name_list': ['碗蓉', '俊俊', '爽妹', '平平'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}} 4,给personal_msg对应的字典添加一个键值对sex:男 dic2 = dic['personal_msg'] dic2['sex'] = '男'
print(dic) dic['personal_msg']['sex'] = '男'
print(dic) {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头'], 'sex': '男'}} 5,将hobby_list 对应的列表中的烫头改为唱歌。 dic['personal_msg']['hobby_list'][-1] = '唱歌'
print(dic) {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '唱歌']}}
练习题:app
一、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
li = 'k:1|k1:2|k2:3|k3:4'.split('|') dic = {} for i in li: i = i.split(':') dic.setdefault(i[0],int(i[1])) print(dic)
2、元素分类 有以下值li= [11,22,33,44,55,66,77,88,99,90],将全部大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 即: {'k1': 大于66的全部值列表, 'k2': 小于66的全部值列表}
dic = {'k1': [], 'k2': []} li= [11,22,33,44,55,66,77,88,99,90] for i in li: if i <66: # # dic.setdefault('k2',[]).append(i)
dic['k2'].append(i) elif i >66: # else: # dic.setdefault('k1',[]).append(i)
dic['k1'].append(i) print(dic)
3、输出商品列表,用户输入序号,显示用户选中的商品 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] 要求:1:页面显示 序号 + 商品名称,如: 1 手机 2 电脑 2: 用户输入选择的商品序号,而后打印商品名称 3:若是用户输入的商品序号有误,则提示输入有误,并从新输入。 4:用户输入Q或者q,退出程序。
li = ["手机", "电脑", '鼠标垫', '游艇'] while True: for i in range(len(li)): print('{}\t{}'.format(i + 1, li[i])) msg = input("请输入商品序号:(退出:Q\q)").strip() # 1a
if msg.upper() == 'Q': print("欢迎使用!") # 加一个购买的商品展现
break
elif msg.isdigit(): msg = int(msg) if 0 < msg <= len(li): print("您选择的商品是:%s" % li[msg-1]) else: print("您选择的商品序号有误,请从新输入!") else: print("您选择的商品序号中包含非数字字符,请从新输入!")