一,字典的简单介绍
概念:

字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
1,已知的可哈希(不可变)的数据类型: int, str, tuple, bool
2,不可哈希(可变)的数据类型: 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. 查询
查询一般用key来查找具体的数据.

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])
练习

1,有如下变量(tu是个元祖),请实现要求的功能

tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
a.讲述元祖的特性
可存放多个值,不可变,按照从左到右的顺序定义元组元素,下标从0开始有序访问,是有序的.
b.请问tu变量中的第一个元素
"alex"
是否可被修改?
不可修改,元组不可变
c.请问tu变量中的
"k2"
对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素
"Seven"
答:k2是字典,可以修改,
tu[1][2].setdefault("Seven")
print(tu)
tu[1][2]["王者荣耀"]="好玩"
print(tu)
d.请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素
"Seven"
答k3对应的值是元组,元组不可变,所以不能被修改.
2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
a.请循环输出所有的key
for k in dic:
print(k)
b.请循环输出所有的value
for v in dic.values():
print(v)
c.请循环输出所有的key和value
for k ,v in dic.items() :
print(k,v)
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)
3,
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["大陆"]["1048"]=["一天就封了"]
print(av_catalog) f, 删除此 "letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"] 键值对。
del av_catalog["欧美"].pop("letmedothistoyou.com")
print(av_catalog) g, 给此["全部免费,真好,好人一生平安", "服务器在国外,慢"] 列表的第一个元素,加上一句话:'可以爬下来'
av_catalog["大陆"]["1024"].insert(0,"可以爬下来")
print(av_catalog) 4、有字符串 "k:1|k1:2|k2:3|k3:4"处理成字典 {'k': 1, 'k1': 2....}(升级题)
ko=[]
lis=[]
el="k:1|k1:2|k2:3|k3:4"
lis.append(el.split("|"))
count=0
dic={}
while count<len(lis):
for i in lis[count] :
count+=1
ko.append(i.split(":"))
print(ko)
for j in ko:
dic[j[0]]=j[1]
print( dic) 5、元素分类
有如下值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]
dic={}
for i in li:
if i>66:
dic.setdefault("k1",[]).append(i)
else:
dic.setdefault("k2",[]).append(i)
print(dic) 6、输出商品列表,用户输入序号,显示用户选中的商品(升级题)
商品列表:
goods = [{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ] 要求:
1:页面显示
序号 + 商品名称 + 商品价格,如:
1 电脑 1999
2 鼠标 10
for i in range( len(goods)):
good=goods[i]
print(i+1,good["name"],good["price"] )
while 1:
num=input("请输入你想要的商品序号号:").strip()
if num.upper()=="Q" :
break
index=int(num) -1
if num.isdigit() and (index <0 or index>len(goods) -1):
print("输入有误")
continue
print("你想要的商品名称是:%s,商品价格是:%s" %(goods[index]["name"],goods[index]["price"]))
扩展:准备一个购物车。把想要的商品保存到购物车。 用户可以随意的对购物车进行增删改查可运用函数解决 2:用户输入选择的商品序号,然后打印商品名称及商品价格 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序。 明日默写内容。 1)字典的增删改查。 2)过滤敏感字符代码的默写。 li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
l1 = []
comment = input('请输入评论>>>')
for i in li:
if
i in comment:
comment = comment.replace(i, '*' * len(i))
l1.append(comment)
print(l1)

  

最新文章

  1. SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
  2. 你不知道的JavaScript 二
  3. Java应用程序实现屏幕的&quot;拍照&quot;
  4. android开发实现静默安装(root权限)
  5. C# 给数据库传入当前时间
  6. RHEL安装docker-compose
  7. Hadoop群集设置
  8. iptables 基本用法
  9. [转载]dreamweaver代码提示失效
  10. 无需安装Oracle Client连接Oracle数据库
  11. Vim 游戏 2048
  12. 简述ADO.NET命名空间
  13. hash(散列函数)
  14. 给centos 7添加硬盘空间
  15. 解决修改css或js文件后,浏览器缓存未更新问题
  16. Linux 重启网卡失败 Job for network.service failed because the control process exited with error code. See &quot;systemctl status network.service&quot; and &quot;journalctl -xe&quot; for details.
  17. webapi core2.1 Identity.EntityFramework Core进行配置和操作数据 (一)没什么用
  18. Spark Streaming之五:Window窗体相关操作
  19. Confluence5.8协作平台软件安装(Linux)
  20. 【BZOJ】【2527】【POI2011】Meteors

热门文章

  1. python之运算符与基本数据类型
  2. 怎样从外网访问内网PostgreSQL数据库?
  3. jboss 报错处理及端口修改
  4. Kattis之旅——Prime Reduction
  5. ThirdAPI
  6. 01: docker 基本使用
  7. 01:CENTOS使用VIRTUALENV搭建独立的PYTHON环境-PYTHON虚拟环境
  8. 2018-2019-1 20189206 《Linux内核原理与分析》第七周作业
  9. Git 安装和使用教程(转载)
  10. mysqldump: Couldn&#39;t execute &#39;SHOW VARIABLES LIKE &#39;ndbinfo_version&#39;&#39;: Native table &#39;performance_schema&#39;.&#39;session_variables&#39; has the wrong structure (1682)