python_day_5

今日大纲:

1. dict
用大括号{} 括起来. 内部使用key:value的形式来保存数据
{'jay':'周杰伦', "jj":'林俊杰'}
注意:字典的key必须是可哈希的. 不可变的, value 没有限制
不是按照我们保存的顺序保存的, 无序的
2. 增删改查

  1. dict[不存在的key] = value, setdefault()
  2. pop(key). del dict[key]. popitem(), clear()
  3. dict[存在的key] = 新值, d1.update(d2) 把d2的k-v更新到d1中
  4. get(key, 默认值), setdefault(), dict[key]

3. 字典的常用方法

  1. keys() 返回所有字典的key的集合(高仿列表)
  2. values() 返回所有的value的集合
  3. items() 返回键值对. 元组

解构:
a, b = (1, 2)

4. 字典的嵌套

05. 万恶之源-基本数据类型(dict)
本节主要内容:

  1. 字典的简单介绍
  2. 字典增删改查和其他操作
  3. 字典的嵌套

⼀. 字典的简单介绍
字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,
那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.
已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set
语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

dic = {'jay':"周杰伦", "jj":"林俊杰", "eason":"陈奕迅"}
print(dic)
dic = {1: "马化腾", False:"阿里巴巴", "sylar":"帅的不行不行的", (1, "哈哈"): "元组", ["吼吼"]:"列表"}
print(dic)

dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表
不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据
⼆. 字典的增删改查和其他相关操作

1. 增加

# 字典的相关操作
# 增加
dict = {"name":"corn","age":21,"sex":"男","hobby":"pplay game","money":1000}
dict["sex"] = "男"  #  增加 如果key重复了. 会替换掉原来的value
dict.setdefault("hobby","play game") # 如果字典中已经包含了这个key. 不再继续保存

2. 删除

#pop
dic = {"牌牌":"你去哪里了", "晓雪":"你快回来.", "雪雪": "又走了"}
ret = dic.pop("晓雪") # 删除一个元素. 返回这个元素的value值
print(ret)
del dic["雪雪"]
#del
ret = dic.popitem() # 返回给你的是一个元组.
print(ret)
print(dic)

3. 修改

#1
dic = {"id":1, 'name':'李嘉诚', 'money':10000000}
# 李嘉诚赔了500
dic['money'] = dic['money'] - 500   # 用key去修改
print(dic)
#2
dic1 = {"李晨":"范冰冰", "邓超":"孙俪", "王祖蓝":"李亚男"}
dic2 = {"李晨":"张馨予", "郑凯":"baby", "王宝强":"马蓉"}
dic1.update(dic2)   #  把dic2中的内容更新到 dic1 , 如果存在了key. 替换. 如果不存在,添加
print(dic1)
print(dic2)

4. 查询
*查询⼀般⽤key来查找具体的数据

#1
dic = {"及时雨":"宋江", "小李广":"花荣", "黑旋风":"李逵", "易大师":"剑圣"}
dic["大宝剑"] = "盖伦"   # 新增
dic["及时雨"] = "天老爷" # 修改
print(dic["易大师是个脑残"])   # 查询, 如果key不存在,报错
print(dic.get("易大师", "余小C"))   # 如果key不存在. 返回None
get()
#可以通过key来获取value的值. 那么如果key不存在. 返回None.
#可以给出一个默认值. 当key不存在的时候返回默认值
#2
dic = {"及时雨":"宋江", "易大师":"剑圣"}
dic.setdefault("及时雨", "诺克萨斯")    # 可以帮我们添加
print(dic)
ret = dic.setdefault("及时雨123", "hello")
print(ret)
print(dic)
#3
#1. 首先判断原来的字典中有没有这个key . 如果没有. 执行新增
#2. 用这个key去字典中查询, 返回查到的结果
dic = {"及时雨":"宋江", "易大师":"剑圣"}
ret = dic.setdefault("及时雨", "西门庆")
print(dic)
print(ret)  

5. 其他相关操作

#1
dic = {"及时雨":"宋江", "易大师":"剑圣", "维恩":"暗影猎手"}
print(dic.keys())   # 拿到所有的key, 返回key的集合. 像是列表. 但是不是列表
for key in dic.keys():  # 可以进行迭代循环print(key)
print(dic.values())
for value in dic.values():print(value)
#2
dic = {"及时雨":"宋江", "易大师":"剑圣", "维恩":"暗影猎手"}
print(dic.items())  # 拿到键值对
# 遍历dict
for k, v in dic.items():print(k , v)
for k, v in dic.items():# = item # (key, value)# print(item) # (key, value)print(k,v)
# 解构 . 解包
a, b = (1, 2)
print(a)
print(b)a, b, c = ("马化腾", "马云", "马良")
print(b)a, b = [1, 2]
print(a, b)

三. 字典的嵌套.

dic = {"name":"汪峰","age": 58,"wife":{"name":"国际章","salary": 180000,"age": 37},"children":[{"name":"老大", "age": 18},{"name":"老二", "age": 118}]
}
print(dic["children"][1]["age"])print(dic["wife"]['salary'])

四.字典的for循环.

dic = {1: 'a', 2:'b', 3:'c'}
for a in dic:   # 直接循环字典.拿到的是keyprint(a)print(dic[a])


作业:

一,有如下变量(tu是个元祖),请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
#a.讲述元组的特性
#元组:不可变的列表.⼜被成为只读列表
# b. 请问tu变量中的第一个元素 "alex" 是否可被修改?
#不可以
# c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
#列表 可以被修改
tu[1][2]["k2"].append("Seven")
print(tu)
# d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
#元组 不可以被修改

二, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# a.请循环输出所有的key
print(dic.keys())
# b.请循环输出所有的value
print(dic.values())
# c.请循环输出所有的key和value
for a,b in dic.items():print(a,b)
# d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic["k4"] = "v4"
print(dic)
# e.请在修改字典中"k1"对应的值为"alex",输出修改后的字典
dic["k1"] = "alex"
print(dic)
# f.请在k3对应的值中追加一个元素44,输出修改后的字典
dic["k3"].append(44)
print(dic)
# g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
dic["k3"].insert(1,18)
print(dic)

三.
av_catalog = {"欧美":{"www.youporn.com": ["很多免费的,世界最大的","质量一般"],"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],"x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"]},"日韩":{"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]},"大陆":{"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]}
}
# a,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个元素:'量很大'。
av_catalog["欧美"]["www.youporn.com"].insert(2,"量很大")
print(av_catalog)
# b,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
av_catalog["欧美"]["x-art.com"].remove("全部收费,屌丝请绕过")
print(av_catalog)
# c,在此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。
av_catalog["欧美"]["x-art.com"].append("金老板最喜欢这个")
print(av_catalog)
# d,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。
av_catalog["日韩"]["tokyo-hot"][1] = av_catalog["日韩"]["tokyo-hot"][1].upper()
print(av_catalog)
# e,给'大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']
av_catalog["大陆"]["1024"] = "一天就封了"
print(av_catalog)
# f,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。
a = av_catalog["欧美"].pop("letmedothistoyou.com")
print(av_catalog)
# g,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
av_catalog["大陆"]["1024"].insert(1,"可以爬下来")
print(av_catalog)

四、有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}  (升级题)
s = "k:1|k1:2|k2:3|k3:4"
dic = {}
count = 0
s1 = s.split("|")
while count <= 3:s1[count] = s1[count].split(":")count += 1for i in s1:dic[i[0]] = int(i[1])
print(dic)

五、元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
li= [11,22,33,44,55,66,77,88,99,90]
l = []
l1 = []
dict = {}
for i in li:if int(i) > 66:l.append(i)elif int(i) < 66:l1.append(i)dict["k1"] = ldict["k2"] = l1
print(dict

六、输出商品列表,用户输入序号,显示用户选中的商品(升级题)
# 商品列表:
goods = [{"name": "电脑", "price": 1999},{"name": "鼠标", "price": 10},{"name": "游艇", "price": 20},{"name": "美女", "price": 998}, ]
# 要求:
# 1:页面显示序号 + 商品名称 + 商品价格,如:
#1 电脑 1999
#2 鼠标 10
# …
a = 0
count = 1
dic = {}
while count < 5:print("%s  %s  %s" % (count,goods[a]["name"],goods[a]["price"]))dic[count] = goods[a]count += 1a += 1
# 2:用户输入选择的商品序号,然后打印商品名称及商品价格
while 1:s = input("请你输入选择的商品的序号:")print("%s  %s" % (dic[int(s)]["name"],dic[int(s)]["price"]))
# 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
while 1:s = input("请你输入选择的商品的序号:")if int(s) > int(4):print("输入有误,请重新输入")else:print("%s  %s" % (dic[int(s)]["name"],dic[int(s)]["price"]))# 4:用户输入Q或者q,退出程序。
while 1:s = input("请你输入选择的商品的序号(按Q退出程序):")if s.upper() == "Q":breakelif int(s) > int(4):print("输入有误,请重新输入")else:print("%s  %s" % (dic[int(s)]["name"],dic[int(s)]["price"]))


2018-07-06  20:20:30

“继续奔跑 输掉一切也不要输掉微笑”

转载于:https://www.cnblogs.com/zycorn/p/9273666.html

python基础数据类型3相关推荐

  1. Python基础数据类型之set集合

    Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...

  2. Python基础数据类型之字符串(二)

    Python基础数据类型之字符串(二) 一.字符串的常规操作 二.字符串的大小写转换 1.首字母大写 2. 每个单词首字母大写 3.大写转化为小写 4.所有字母变成大写字母 二.验证码忽略大小写 三. ...

  3. Python基础数据类型之字符串(一)

    Python基础数据类型之字符串(一) 一.字符串格式化 1.字符串占位符 2.字符串格式化操作 二.f-string格式化 三.字符串的索引 四.字符串的切片 1.常规切片使用方法 3.步长的介绍 ...

  4. python基础数据类型操作系统_python基础数据类型

    python变量名里面 不能使用系统自带的关键字 不能有符号 不能使用数字作为开头 大小写敏感 变量名是没有类型的  是变量名所引用对象的数据类型 变量无须一些括号来括起来 python数据类型的可变 ...

  5. Python基础——数据类型—集合

    Python基础--数据类型-集合 Python基础--数据类型-集合 创建集合 快速查看元素是否在集合内 两个集合间的运算 集合a中包含,而集合b中不包含的元素 集合a或集合b中包含的所有元素 集合 ...

  6. Python基础——数据类型—元组

    Python基础--数据类型-元组 Python基础--数据类型-元组 元组的创建 访问元组 元组的拼接 元组中的元素是不允许进行修改和删除的,但是可以删除整个元组 元组的运算符 打印元组元素 元组的 ...

  7. 一木.溪桥学Python-04: Python基础数据类型int ,float ,bool ,complex,None,str, 转义字符

    一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-04: Python基础数据类型int ,float ,bool ,compl ...

  8. python基础数据类型之列表,元组(基础二)

    第四章 python基础数据类型之列表,元组(基础二) python常用数据类型之组合数据类型:列表,元组. 4.1 列表 list 列表介绍 列表是python的基础数据类型之⼀ ,其他编程语⾔言也 ...

  9. Python运维开发(CMDB资产管理系统)——Python基础数据类型

    Python基础数据类型 字符串(可以通过单引号,双引号,三个双引号来表示) 布尔(True和False) 整数 浮点数 列表 定义一个列表 列表常用的一些函数 append(向列表中添加元素,元素可 ...

  10. Python 基础数据类型 -字符串(str)的详细用法

    字符串是编程中最重要的数据类型,也是最常见的 1.字符串的表示方式 -单引号' ' 双引号 " " 多引号 """ """ ...

最新文章

  1. Android之LinearLayout布局下怎么让按钮固定在底部
  2. 数据结构 图的广度优先遍历 C++
  3. PCL学习笔记01:在Ubuntu上安装PCL
  4. 参考文献的引用的格式
  5. 快速将 gif 图转成 jpg 图片
  6. 注塑缺陷浮纤的原因及解决对策
  7. DataGridView绑定null后再次绑定DataSource列标题成英文
  8. QML类型:Window
  9. 看板 工具_2019年14种最佳看板工具
  10. mysql sql 列变成横向_mysql怎么更改纵向变横向排列
  11. 计算机专业职业取向,我的职业兴趣-我似乎对任何领域都有兴趣,有时会很想知道计算机及其网络是怎么设计运作的,...
  12. keras:Convolution2D与Conv2D
  13. 谷歌SRE与运维工作的思考
  14. 海康监控平台投屏电视墙方案切换失败故障
  15. linux两个整数加减乘除,加减乘除运算符
  16. 咖说 | 潘超:数字货币「矩阵」里的「盗梦空间」
  17. UDDi注册中心的实现
  18. 软件工程——三次软件危机的表现及起因
  19. ias mysql_交换机AAA方案简单实现(IAS+AD方案)
  20. 《设计模式之禅》之六大设计原则

热门文章

  1. Cris 学 SpringMVC(二):使用 servlet 原生 api 作为方法入参
  2. Github Actions 自动同步到 Gitee
  3. 拼多多关键词测试软件,拼多多图片怎么测试?有哪些步骤?
  4. Android 11 微信友盟分享报错 分享异常 Android 11及以上系统的手机需要使用FileProvider方式分享
  5. 【面经】寒冬中的一年半前端跳槽
  6. NC 前端修改数据库的方法
  7. esp32cam.cpp:30:3: error: ‘camera_sensor_info_t’ was not declared in this scope camera_sensor_info_t
  8. mysql员工星期排班表设计_vue+element项目做员工排班表
  9. 更开放的苹果能否改变iOS越狱市场的未来?
  10. 9.Excel vba开发-转换为大写