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

字典(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)

  

python中字典的用法的更多相关文章

  1. 【313】python 中 print 函数用法总结

    参考:python 中 print 函数用法总结 参考:Python print() 函数(菜鸟教程) 参考:Python 3 print 函数用法总结 目录: 字符串和数值类型 变量 格式化输出 p ...

  2. python 中del 的用法

    python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...

  3. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  4. Python dictionary 字典 常用法

    Python dictionary 字典 常用法 d = {} d.has_key(key_in)       # if has the key of key_in d.keys()          ...

  5. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  6. python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  7. python中字典排序,列表中的字典排序

    python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...

  8. python中MySQLdb模块用法实例

    篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中 ...

  9. python 中的"switch"用法

    转载:http://python.jobbole.com/82008/ 为什么Python中没有Switch/Case语句? 不同于我用过的其它编程语言,Python 没有 switch / case ...

随机推荐

  1. Install kubernetes without yum

    下载最新版本: https://github.com/kubernetes/kubernetes/releases 下载kubernetes.tar.gz即可 解压缩后到cluster目录下 执行ge ...

  2. Q_DECL_OVERRIDE

    Q_DECL_OVERRIDE也就是c++的override # define Q_DECL_OVERRIDE override 在重写虚函数时会用到, 作用是防止写错虚函数: void keyPre ...

  3. 定时释放Linux/CentOS缓存

    #!/bin/bash used=`free -m | awk 'NR==2' | awk '{print $3}'` free=`free -m | awk 'NR==2' | awk '{prin ...

  4. P2336 [SCOI2012]喵星球上的点名(后缀自动机+莫队+dfs序)

    P2336 [SCOI2012]喵星球上的点名 名字怎么存?显然是后缀自动机辣 询问点到多少个喵喵喵其实就是 查询后缀自动机上parent树的一个子树 于是我们考虑莫队 怎么树上莫队呢 我们用dfs序 ...

  5. ARIA无障碍技术

    ARIA Accessible Rich Internet Applications (ARIA) 规定了能够让 Web 内容和 Web 应用(特别是那些由 Ajax 和 JavaScript 开发的 ...

  6. Pycharm创建Django项目并访问Django

    Pycharm创建Django项目并访问Django 一.Django插件 如果没有Django插件,需要先安装Django插件. 1,首先点击Default Settings,打开设置页面: 2,打 ...

  7. UnicodeEncodeError: 'utf-8' codec can't encode character '\udce4' in position 1: surrogates not allowed根本解决方法

    下午开发新改的代码在print路径时出现上述问题,如下: Traceback (most recent call last): File "./update.py", line 6 ...

  8. Nginx启动错误:error while loading shared libraries: libpcre.so.0

    今天测试的时候,启动一个其他机器预编译好的nginx到目标测试机器(OEL 7.4)启动的时候,报了下列错误: /usr/local/nginx/sbin/nginx: error while loa ...

  9. 微信小程序细节

    微信小程序开发几个细节: 1.界面传值 ①全局参数传值 <!--结果--> <view wx:for="{{data}}" class="case pr ...

  10. Centos7编译安装zabbix-4.0.1

    架构组合:nginx1.9.10+php7.0.32+mysql5.7.22+zabbix4.0.1 nginx1.9.10 先装依赖 openssl-1.1.0f tar zxvf openssl- ...