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 = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅 哥', '美⼥女女'], (1, 2, 3): '麻花藤'} print(dic[123]) print(dic[True]) print(dic['id']) print(dic['stu']) print(dic[(1, 2, 3)]) # 不不合法 # dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不不能作为key # dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不不能作为key dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不不能作为key
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽而hash表
不是连续的. 所以不能进⾏行行切片⼯工作. 它只能通过key来获取dict中的数据
⼆二. 字典的增删改查和其他相关操作
1. 增加
dic = {} dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀一个key-value的组 合进dict dic['age'] = 18 print(dic) # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值 dic.setdefault('李李嘉诚') # 也可以往⾥里里⾯面设置值. dic.setdefault("李李嘉诚", "房地产") # 如果dict中已经存在了了. 那么setdefault将不不会 起作⽤用 print(dic)
2. 删除
ret = dic.pop("jay") print(ret) del dic["jay"] print(dic) # 随机删除. ret = dic.popitem() # 清空字典中的所有内容 dic.clear()
3. 修改
dic = {"id": 123, "name": 'sylar', "age": 18} dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"} dic.update(dic1) # 把dic1中的内容更更新到dic中. 如果key重名. 则修改替换. 如果不不存 在key, 则新增. print(dic) print(dic1)
4. 查询
print(dic['name']) # print(dic['sylar']) # 报错 print(dic.get("ok")) print(dic.get("sylar")) # None print(dic.get("sylar", "⽜牛B")) # ⽜牛B
5. 其他相关操作
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐比"} print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不不⽤用管它是什什么.当 成list来⽤用就⾏行行 for key in dic.keys(): print(key) print(dic.values()) # dict_values([123, 'sylar', 18, '科⽐比']) ⼀一样. 也当 list来⽤用 for value in dic.values(): print(value) print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科⽐比')]) 这个东⻄西也是list. 只不不过list中装的是tuple for key, value in dic.items(): # ?? 这个是解构 print(key, value) # 解构 a, b = 1, 2 print(a, b) (c, d) = 3, 4 print(c, d) e, f = [1, 2, 3] # 解构的时候注意数量量必须匹配 print(e, f)
三. 字典的嵌套
# 字典的嵌套 dic1 = { "name": "汪峰", "age": 18, "wife": { "name": '章⼦子怡', "age": 28 }, "children": ['第⼀一个⽑毛孩⼦子', '第⼆二个⽑毛孩⼦子'], "desc": '峰哥不不会告我吧. 没关系. 我想上头条的' } print(dic1.get("wife").get("name"))
print(dic1.get("children"))
print(dic1.get("children")[1])
练习:
dic1 = {
'name':['alex',2,3,5],
'job':'teacher',
'oldboy':{'alex':['python1','python2',100]}
}
1,将name对应的列列表追加⼀一个元素’wusir’。
2,将name对应的列列表中的alex⾸首字⺟母⼤大写。
3,oldboy对应的字典加⼀一个键值对’⽼老老男孩’,’linux’。
4,将oldboy对应的字典中的alex对应的列列表中的python2删除。
dic1 = { 'name':['alex',2,3,5], 'job':'teacher', 'oldboy':{'alex':['python1','python2',100]} } dic1["name"].append("wusir") dic1["name"][0]=dic1["name"][0].capitalize() dic1['oldboy']["老老老男孩"]="linux" dic1["oldboy"].setdefault("老老老男孩","linux") dic1['oldboy']["alex"].pop(1) dic1['oldboy']["alex"].remove("python2") del dic1['oldboy']["alex"][1] del dic1['oldboy']["alex"][-2] print(dic1)
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]) # 元祖 tuple,不可修改的列表,只允许查询,用法与list类似 第一层元素不可修改 #b "alex" 不可修改 #c tu变量中的"k2"对应的值是["age", "name"] 可以修改 tu[1][2]["k2"].append("Seven") print(tu[1][2]["k2"]) #d tu变量中的"k3"对应的值是元祖 不可修改 print(tu)
2, 字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}a.请循环输出所有的key
for el in dic: print(el)
b.请循环输出所有的value
for el in dic: print(dic[el])
c. 请循环输出所有的key和value
for el in dic: print(el,dic[el])
d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic.setdefault("k4","v4") print(dic)
e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic["k1"]=["alex"] print(dic)
dic["k1"]="alex"print(dic)
f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
dic["k3"].append(44) print(dic)
g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic["k3"].insert(0,18) print(dic)
3,av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
a,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个 元素:'量很大'。
b,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
c,在此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。
d,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。
e,给'大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']
f,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。
g,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
av_catalog = { "欧美":{ "www.youporn.com": ["很多免费的,世界最大的","质量一般"], "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"] }, "日韩":{ "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"] }, "大陆":{ ":["全部免费,真好,好人一生平安","服务器在国外,慢"] } } av_catalog["欧美"]["www.youporn.com"].append("量很大") av_catalog["欧美"]["x-art.com"].pop() av_catalog["欧美"]["x-art.com"].append("金老板最喜欢这个") av_catalog["日韩"]["tokyo-hot"][1]=av_catalog["日韩"]["tokyo-hot"][1].upper() av_catalog["]=['一天就封了'] av_catalog[",'一天就封了') av_catalog["欧美"].pop("letmedothistoyou.com") del av_catalog["欧美"]["letmedothistoyou.com"]
"][0]+("可以爬下来") print(av_catalog)
4、有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} (升级题)
dic={} str="k:1|k1:2|k2:3|k3:4" lis=[] lis=str.split("|") for i in range(len(lis)): dic.setdefault(lis[i].split(":")[0],lis[i].split(":")[1]) print(dic)
5、元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
dic={} li= [11,22,33,44,55,66,77,88,99,90] lis=[] lis1=[] for i in range(len(li)): if li[i]>66: lis.append(li[i]) dic.setdefault("k1",lis) # print(li[i]) else: lis1.append(li[i]) dic.setdefault("k2", lis1) # print(li[i]) print(dic)
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}, ] shopping_car=[] for i in range(len(goods)): print("编号",i+1,":",goods[i]["name"],goods[i]["price"]) while 1: choice = input("请输入你想要购买的商品序号:") if choice.isdigit(): choice=int(choice) if (choice)>0 and (choice)<len(goods)+1: print(goods[int(choice) - 1]["name"], goods[int(choice) - 1]["price"]) shopping_car.append(choice) else: print("输入有误,并重新输入") continue # choice = input("请重新输入你想要购买的商品序号:") # print(goods[choice - 1]["name"], goods[choice - 1]["price"]) elif (str(choice)).upper()=="Q": print("你已经购买了以下商品") for i in range(len(shopping_car)): print(goods[shopping_car[i] - 1]["name"], goods[shopping_car[i] - 1]["price"]) break else: continue
day 05 万恶之源-基本数据类型(dict)的更多相关文章
-
万恶之源 - Python数据类型二
列表 列表的介绍 列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各 ...
-
万恶之源-python基本数据类型
万恶之源-基本数据类型(dict) 本节主要内容: 字典的简单介绍 字典增删改查和其他操作 3. 字典的嵌套 ⼀一. 字典的简单介绍 字典(dict)是python中唯⼀一的⼀一个映射类型.他是以{ ...
-
基本数据类型(dict)
05. 基本数据类型(dict)内容:1. 字典的简单介绍2. 字典增删改查和其他操作3. 字典的嵌套⼀. 字典的简单介绍字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对 ...
-
1.python真的是万恶之源么?(初识python)
python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...
-
万恶之源 - Python基础数据类型三
字典 字典的简单介绍 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key ...
-
万恶之源 - Python基础数据类型一
整数 整数在Python中的关键字用int来表示; 整型在计算机中运于计算和比较 在32位机器上int的范围是: -2**31-2**31-1,即-2147483648-2147483647 在64 ...
-
万恶之源 - Python模块一
序列化 我们今天学习下序列化,什么是序列化呢? 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 为什么要有序列化模块: 比如,我们在python代码中计算的一个数据需要给另外一段程序使用 ...
-
redis源码之dict
大家都知道redis默认是16个db,但是这些db底层的设计结构是什么样的呢? 我们来简单的看一下源码,重要的字段都有所注释 typedef struct redisDb { dict *dict; ...
-
Python - 基础数据类型 dict 字典
字典简介 字典在 Python 里面是非常重要的数据类型,而且很常用 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一 ...
随机推荐
-
身份证校验(java)
判断是第几代身份证(第一代15位, 第二代18位) if (cardId.length() == 15 || cardId.length() == 18) { if (!this.cardCodeVe ...
-
Android studio配置Git
Android studio配置Git 1.下载window 版git并安装:下载地址 2.Android Studio设置git插件:File->Setting->Version Con ...
-
IIS错误日志:Failed to execute request because the App-Domain
装上IIS和.net2.0框架后,打开ASP.NET站点,出现Server Application Error,出先此问题,一般先看系统的“事件管理器”,于是查看服务器的“事件管理器”中的“应用程序” ...
-
【HAOI2011】向量
[题目描述] 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个 ...
-
html链接
1. <a href="/index.html">本文本</a> 是一个指向本网站中的一个页面的链接.</p><p><a hr ...
-
android上传json与服务器交互
http://www.2cto.com/kf/201403/289328.html http://www.tuicool.com/articles/FZJR3eB
-
jS处理中英文时间格式化问题
// datebox里面日期格式化,i18nStr是当前国际化的日期格式,fdate是需要处理的时间,默认为当前时间 function formatDate(i18nStr,fdate) { var ...
-
xshell的优化和连接
远程连接linux ###远程连接工具---xshell/SecureCRT/Putty 商业版(收费) 家庭版(免费) 一.xshell进行优化 1.打开文件属性 2.设置终端类型问linux,输入 ...
-
js 二叉树删除最大值和最小值
//删除最小值function delMinNode (root){ if(!root) { return false; } var current = root; if (current.left ...
-
spring init method destroy method
在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. ...