19-3-6Python中字典的解释、使用、嵌套
一、字典
为什么学字典:
列表的缺点:
1.列表如果存储的数据比较多,那么他的查询速度相对慢。
2.列表存储的数据关联性不强。
字典是什么:
Python基础数据类型之一:字典。
Python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以逗号隔开的。
{‘name’:’太白金星’,’age’:18,’sex’:’man’}
Ps:
数据类型的划分:
容器与非容器的划分:
容器型数据类型:list,tuple,dict,set.
非容器型数据类型:int str bool
可变与不可变划分:
可变(不可哈希-hash)的数据类型:list dict set
不可变(可哈希)的数据类型:int bool str tuple(元组)
字典是以键值对形式存储的,
键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。
值:任意数据类型,对象。
字典可以存储大量的键值对数据,
Python3.5包括3.5之前:字典是无序的。
Python3.6之后,字典是按初始顺序进行排列。
字典的优点:
- 字典存储大量的关系型数据。
- 字典的查询速度非常快。
二、字典的使用
增:
直接增:dic[‘hight’]=176-----à有则覆盖,无则添加。
考虑增:dic.setdefault(‘weight’,160)----à有则不变,无则添加
删:
按照键删除掉键值对:dic.pop(‘name’)-----à如果不设置返回值:没有找到会报错。设置返回值为:dic.pop(‘name’,’NULL’)
清空:dic.clear()
Del
改:
Dic.update(car=’逍遥’,money=1300)
Dic2.update(dic)把dic的内容添加到dic2中
查:
- print(dic[‘age’])
- print(dic.get(’age’)) 没有的话默认返回none,可以设置返回值。
其他:
分别赋值:a,b=(1,2)
Print(1,2)
Dic.items() 获取所有的键值对
Dic.value()获取值
Dic.keys()获取键
字典的嵌套:
1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。
2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。
3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。
4,给barry对应的小字典增加一个键值对: weight: 160
练习:
1.有如下变量(tu是个元祖),请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
a. 讲述元祖的特性
b. 请问tu变量中的第⼀个元素 "alex" 是否可被修改?
c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在 其中添加⼀个元素 "Seven"
d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其 中添加⼀个元素 "Seven"
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) a.元组默认不可修改,只可查询,读取。 b.tu变量中的第一个元素'alex'不可被修改,因为元组中的元素不可修改,但是元组中元素的元素可以被修改。 c.是列表类型,可以被修改。 a = tu[1][2]['k2'] a.append('Seven') tu[1][2]['k2'] = a print(tu) d.元组类型,不可以被修改。
2.字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} 1.请循环输出所有的key print(dic.keys()) 2.请循环输出所有的value print(dic.values()) 3.请循环输出所有的key和value print(dic.items()) 4.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典 dic.setdefault('k4','v4') print(dic) 5.请在修改字典中"k1"对应的值为"alex",输出修改后的字典 dic['k1'] = 'alex' print(dic) 6.请在k3对应的值中追加一个元素44,输出修改后的字典 dic['k3'].append(44) print(dic) 7.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典 dic['k3'].insert(0,18) print(dic)
3.如下:
a.给此 ["很多免费的,世界最⼤的","质量⼀般"]列表第二个位置插⼊⼀个 元素:'量很⼤'。 a=av_catalog['欧美']['www.太白.com'].insert(1,'量很大') print(av_catalog) b.将此["质量很⾼,真的很⾼","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。 av_catalog['欧美']['hao222.com'].pop(1) print(av_catalog) c.将此["质量怎样不清楚,个⼈已经不喜欢⽇韩范了","verygood"]列表的 "verygood"全部 变成⼤写。 av_catalog['日韩']['tokyo-hot'][1] = av_catalog['日韩']['tokyo-hot'][1].upper() print(av_catalog) d.给 ' :['⼀天就封了'] av_catalog[',['一天就封了']) print(av_catalog) e.删除这个键值对:"oldboy.com":["多是自拍,高质量图片很多","资源不多,更新慢"] av_catalog['欧美'].pop('oldboy.com') print(av_catalog) f.给此["全部免费,真好,好⼈⼀⽣平安","服务器在国外,慢"]列表的第⼀个元素,加上 ⼀句话:'可以爬下来' av_catalog['][0]+'可以爬下来' print(av_catalog)
4.有字符串"k: 1|k1 :2|k2:3 |k3 :4" 处理成字典 {'k':1,'k1':2....} (升级题)
a = 'k: 1|k1 :2|k2:3 |k3 :4' l = {} a = a.replace(' ', '').split('|') for i in range(0, len(a)): a[i] = a[i].split(':') l.setdefault(a[i][0], int(a[i][1])) print(l)
5.元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有⼤于 66 的值保存⾄字典的
第⼀个key中,将⼩于 66 的值保存⾄第⼆个key的值中。
即:{'k1':⼤于66的所有值列表,'k2': ⼩于66的所有值列表}
l = {} a = [] b = [] li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] for i in li: if i > 66: a.append(i) elif i < 66: b.append(i) l.setdefault('k1', a) l.setdefault('k2', b) print(l)
6.输出商品列表,⽤户输⼊序号,显示⽤户选中的商品
商品列表:goods = [{"name": "电脑", "price": 1999}, {"name": "⿏标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美⼥", "price": 998}, ]
要求:
1:⻚⾯显示 序号 + 商品名称 + 商品价格,如: 1 电脑 1999 2 ⿏标 10 …。
2:⽤户输⼊选择的商品序号,然后打印商品名称及商品价格。
3:如果⽤户输⼊的商品序号有误,则提示输⼊有误,并重新输⼊。
4:⽤户输⼊Q或者q,退出程序。
goods = [{"name": "电脑", "price": 1999}, {"name": "⿏标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美⼥", "price": 998}, ] # 1.⻚⾯显示 序号 + 商品名称 + 商品价格 time = 0 for i in goods: time += 1 print(time, i['name'], i['price']) # 2.⽤户输⼊选择的商品序号,然后打印商品名称及商品价格 while True: i = input('请用户输入序号:') if i == 'Q' or i=='q': break a=int(i) if 0 < a < 5: print(goods[a - 1]['name'], goods[a - 1]['price']) else: print('用户输入的商品序号有误,请重新输入!')
最新文章
- C# 中的委托和事件(转载)
- iOS中的数据持久化方式
- Windows Azure Cloud Service (11) PaaS之Web Role, Worker Role(上)
- andriod 用户名和密码
- 随笔 planetest
- Leetcode#151 Reverse Words in a String
- hdu 1530 最大团模板
- Google搜索的配置方法
- android笔记20170116
- Maven安装配置(Windows10)
- 冒泡排序(JAVA实现)
- Linux环境安装、卸载Docker
- Python 基于时间的进程通信
- 4-Python3从入门到实战—基础之数据类型(字符串-String)
- HDOJ 5288 OO’s Sequence 水
- Ubuntu16.04 无法连接WiFi
- 关于lidroid xUtils 开源项目
- 基于C#语言MVC框架NPOI控件导出Excel表数据
- [MYSQL] 如何彻底卸载MYSQL5.x
- JSP 中的 Request 和 Response 对象