1.字典

1)定义:查找速度快,效率高;用{}括起来,内部使用key:value的形式来保存数据;键值对是无序的,不是按照定义的方式保存数据的(类似于json文件),

例如: {'jay':'周杰伦','jj'::'林俊杰'}

注:字典的key必须是可哈希的(先将key通过hash算法转化成一个hash值,再通过hash值直接找到值),不可变的;而对于value是没有限制的

#如下字典为错误定义:

dic = {"cat":"小猫","dog":"小狗",["fruit"]:"apple"}print(dic)

报错:

TypeError: unhashable type:'list'

View Code

2)字典的增加

①普通增加

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"

print(dic)

输出:

{'pig': '小猪佩奇', 'dog': '小狗', 'cat': '小猫'}

View Code

注:如果key存在了会替换掉原来的数据

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"dic["pig"]="小猪乔治"

print(dic)

输出:

{'dog': '小狗', 'cat': '小猫', 'pig': '小猪乔治'}

View Code

②通过函数setdefault对字典进行增加

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"dic.setdefault("panda","小熊猫")print(dic)

输出:

{'dog': '小狗', 'panda': '小熊猫', 'cat': '小猫', 'pig': '小猪佩奇'}

View Code

注:通过函数setdefault()添加,如果字典中已经包含了这个key,那么不再往字典中继续保存新的值,还是原来的值

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"dic.setdefault("panda","小熊猫")

dic.setdefault("panda","中华大熊猫")print(dic)

输出:

{'pig': '小猪佩奇', 'cat': '小猫', 'panda': '小熊猫', 'dog': '小狗'}

View Code

3)字典的删除

①通过pop用key去删除数据(删除一个字典元素,返回字典的value值)

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"res= dic.pop("dog")print(res)print(dic)

输出:

小狗

{'cat': '小猫', 'pig': '小猪佩奇'}

View Code

②通过del删除字典中的元素

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"

del dic["cat"]print(dic)

输出:

{'dog': '小狗', 'pig': '小猪佩奇'}

View Code

③通过popitem随机删除字典中的元素(会返回一个元组)

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"res=dic.popitem()print(res)print(dic)

输出:

('cat', '小猫')

{'pig': '小猪佩奇', 'dog': '小狗'}

View Code

④清空字典中的所有元素

dic = {"cat":"小猫","dog":"小狗"}

dic["pig"]="小猪佩奇"dic.clear()print(dic)

输出:

{}

View Code

4)字典的修改

①将字典一中的内容更新到字典二中,如果key重名,则进行替换,如果key值不存在,进行新增

dic_1 = {"cat":"小猫","dog":"小狗"}

dic_2= {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}

dic_1.update(dic_2)print(dic_1)print(dic_2)

输出:

{'dog': '小狗', 'panda': '小熊猫', 'cat': '大花猫', 'pig': '小猪'}

{'panda': '小熊猫', 'cat': '大花猫', 'pig': '小猪'}

View Code

例:对key的值进行修改

dic = {'id':1,'name':"马云",'money':10000000}

dic['money'] = dic['money'] - 500000

print(dic)

输出:

{'money': 9500000, 'name': '马云', 'id': 1}

View Code

5)字典元素的查找

①按照[],通过key取值 (  []中的值就类似于索引 );通过该方法查值,如果字典中的key不存在,就会报错

dic_2 = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic_2['panda'])

输出:

小熊猫

View Code

②通过get方法,通过key取值;如果key不存在,则返回None

dic_2 = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic_2.get("pig"))print(dic_2.get("dog"))

输出:

小猪

None

View Code

#通过get获取值时,如果字典中key值不存在,返回None,可以设定一个默认值,当key值不存在时返回一个默认值

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.get("dog","不存在"))

输出:

不存在

View Code

③通过setdefault获取字典中对应key的值

注:setdefault首先判断原来字典中有没有key,如果没有,则执行新增;其次用这个key去字典中查询,返回查到的结果

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.setdefault("panda"))

输出:

小熊猫

View Code

#获取setdefault存入的值

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}

res= dic.setdefault('dog',"小奶狗")print(res)print(dic)

输出:

小奶狗

{'panda': '小熊猫', 'dog': '小奶狗', 'pig': '小猪', 'cat': '大花猫'}

View Code

#如果原来的字典中,存在这个key,则直接返回原来的值

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}

res= dic.setdefault('panda',"大大大大熊猫")print(res)print(dic)

输出:

小熊猫

{'panda': '小熊猫', 'cat': '大花猫', 'pig': '小猪'}

View Code

6)字典的相关操作

①返回字典中所有的key(返回key的集合,像是列表,但是不是列表,也可以进行迭代循环)

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.keys())for i indic.keys():print(i)

输出:

dict_keys(['pig', 'cat', 'panda'])

pig

cat

panda

View Code

②返回字典中所有的值(像是列表,但是不是列表,也可以进行迭代循环)

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.values())for i indic.values():print(i)

输出:

dict_values(['小猪', '小熊猫', '大花猫'])

小猪

小熊猫

大花猫

View Code

③获取所有的键值对(每一项都是一个元组)

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.items())for i indic.items():print(i)

输出:

dict_items([('pig', '小猪'), ('cat', '大花猫'), ('panda', '小熊猫')])

('pig', '小猪')

('cat', '大花猫')

('panda', '小熊猫')

View Code

#通过元组的索引分别获取key和values的值

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.items())for i indic.items():print(i[0]) #获取key

print(i[1]) #获取values

输出:

dict_items([('cat', '大花猫'), ('pig', '小猪'), ('panda', '小熊猫')])

cat

大花猫

小猪

panda

小熊猫

View Code

2.解构/解包:

把元组中每一个元素拿出来,赋值给前面的变量,这种方式叫做解包(列表也适用)

a,b = 1,2

a,b = (1,2)

a,b = [1,2]

#例1

a,b = (1,2)print(a,b)

输出:1 2

View Code

#例2

a,b,c = ('古力娜扎','马儿扎哈','迪丽热巴')print(b)

输出:

马儿扎哈

View Code

#通过解构的方式,遍历items中的key和values

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.items())for item indic.items():

k,v=itemprint(k,v)

输出:

dict_items([('panda', '小熊猫'), ('pig', '小猪'), ('cat', '大花猫')])

panda 小熊猫

pig 小猪

cat 大花猫

View Code

#解构进阶

dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}print(dic.items())for k,v indic.items():print(k,v)

输出:

dict_items([('pig', '小猪'), ('panda', '小熊猫'), ('cat', '大花猫')])

pig 小猪

panda 小熊猫

cat 大花猫

View Code

总结:

1)keys:获取到字典中所有的key,然后存在一个高仿列表中

2)values:获取到字典中所有的value,然后存在一个高仿的列表中

3)items:获取到所有的键值对,以元组的形式存放在高仿的列表中

3.字典的嵌套

#字典嵌套取值练习

dic ={'name':"阿狸",'age':"18",'nickname':"九尾妖狐",'skill': {'q':"欺诈宝珠",'w':"妖异狐火",'e':"魅惑妖术",'r':"灵魂突袭"},'hoby':['包子','猴子']

}print(dic["skill"]["r"])print(dic["hoby"][1])

输出:

灵魂突袭

猴子

View Code

4.练习

1)有字符串"k:1|k1:2|k2:3|k3:4"处理成字典{'k':1,'k2':2….}

s = "k:1|k1:2|k2:3|k3:4"s_new= s.split("|")print(s_new)

dic={}for i ins_new:

k,v= i.split(":")

dic[k]=int(v)print(dic)

输出:

['k:1', 'k1:2', 'k2:3', 'k3:4']

{'k3': 4, 'k1': 2, 'k2': 3, 'k': 1}

View Code

2)按照如下需求处理列表

①页面显示: 序号 + 商品名称 + 商品价格,如:

1 电脑 1999

2 鼠标 10

.。。

②用户输入选择的商品序号,然后打印商品名称及商品价格

③如果用户输入的商品序号有误,则提示输入有误,并重新输入

④用户输入Q或者q,退出程序

⑤列表如下:

goods = [{'name':"电脑",'price':1999},{'name':"鼠标",'price':10},{'name':"游艇",'price':20},{'name':"美女",'price':998},]

#步骤1

goods = [{'name':"电脑",'price':1999},

{'name':"鼠标",'price':10},

{'name':"游艇",'price':20},

{'name':"美女",'price':998},]for i ingoods:print(goods.index(i),i['name'],i['price']) #doods.index(i) 先获取到列表中元素的下标

输出:1 电脑 1999

2 鼠标 10

3 游艇 20

4 美女 998

View Code

#步骤2

goods = [{'name':"电脑",'price':1999},

{'name':"鼠标",'price':10},

{'name':"游艇",'price':20},

{'name':"美女",'price':998},]while 1:for i ingoods:print(goods.index(i)+1,i['name'],i['price']) #doods.index(i) 先获取到列表中元素的下标

str_input = input("请输入你要选择的序号,按Q/q退出:")if str_input.isdigit() and int(str_input) > 0 and int(str_input)

i_index= int(str_input) -1

print(goods[i_index]['name'],goods[i_index]['price'])elif str_input.upper() == "Q":break

else:print("输入有误,请重新输入")

View Code

python我想对你说_python学习第3天-----字典、解构相关推荐

  1. python我想对你说_python学习第12天----内置函数

    1.内置函数 python解释器提供的,直接可以使用的函数,如print,input等 1)作业域相关 ①globals() 以字典的类型返回全部局部变量 ②locals()   以字典的类型返回当前 ...

  2. python我想对你说_python学习第20天----面向对象复习、__repr__

    1.面向对象 #问题: ①写代码时,什么时候用面向对象:处理比较复杂的角色之间的关系(代码量大,功能多的时候),如复杂的电商程序.公司/学校的人事管理的系统:提高代码的可读性,清晰度(无论是开发者还是 ...

  3. python我想对你说_python学习第4天----is和==区别、小数据池、编码解码

    1.is和==的区别 1)==比较的是左右两边的值,无论是字符串.数字.列表,元组.若两边的值相等,则返回True a = "zdz"b= "zdz" prin ...

  4. python我想对你说_python学习第6天----文件操作

    1.文件操作 python中通过open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可进行各种操作(句柄就相当于一个变量),文件句柄是一个可迭代对象 打开文件的操作有:r,w,a,r+,w ...

  5. python我想对你说_python学习22天----模块、包

    1.from ...import  xxx 例: frommy_moudle importlogin 1)from import 的时候发生了什么 ①先找到my_moudle模块 ②开辟一块属于这个模 ...

  6. python第三项基础知识_Python学习心得——基础知识(三)

    一.常见的Python种类 1.Cpython 使用C语言实现,Python的官方版本,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上.我们目前 ...

  7. Kotlin学习笔记 第四章 解构声明 集合集合的扩展方法 Range 异常 Throw关键字

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  8. python列表和元组的应用_python学习笔记之列表(list)与元组(tuple)详解

    前言 最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧--我要重新把python的教程阅读一遍,把以前自己忽略的部分学习,加强练习和记 ...

  9. python 找到目录下文件名规则_Python学习第162课--PATH变量值修改以及模糊查找文件名...

    [每天几分钟,从零入门python编程的世界!] 我们在使用Linux系统时,经常会安装很多第三方的程序或文件到电脑上.我们安装程序后,这个程序在电脑上会有一个默认的路径,我们先看看程序安装的默认的路 ...

最新文章

  1. GitHub上7000+ Star的Python常用代码合集
  2. 【Linux 内核 内存管理】RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )
  3. 大话InnoDB索引原理
  4. 就业局培训计算机心得,人社局计算机培训心得体会.doc
  5. 从日志入手,保障 Kubernetes 稳定性
  6. Android-Socket的最基础实现以及遇见在2.3可用4.3不可用的解决方法
  7. Mac下matplotlib中文显示
  8. VueJS样式绑定:v-bind
  9. layui按条件隐藏表格列
  10. SharpZipLib解压缩时中文名乱码[解决]
  11. 称赞上海禁用一次性酒店用品
  12. 【C语言】c语言练习题【4】(适合初学者)
  13. echarts地图各种点位实现
  14. 区块链技术在银行业的应用
  15. 【文献笔记】【精读】Near-Ultrasound Communication for TV’s 2nd Screen Services
  16. 怎样从 Google Play 下载 Android 程序到电脑上
  17. 我爬取交通学博士分享的GIS资源
  18. 函数相乘和相除的导数及证明
  19. 统计学:描述性统计分析
  20. CTF-MD5之守株待兔,你需要找到和系统锁匹配的钥匙 WP

热门文章

  1. python中excel制作成绩报表_python制作简单excel统计报表2之操作excel的模块openpyxl简单用法...
  2. 学习理发去哪里_学习美发去哪里学
  3. sdi转hdmi转换器应用领域及规格参数详解
  4. [渝粤教育] 西南科技大学 经济数学1 在线考试复习资料
  5. 【渝粤教育】电大中专电大中专沟通技巧考试考核试题 (2)作业 题库
  6. [渝粤教育] 西南科技大学 畜牧概论 在线考试复习资料
  7. python str translate,str.translate() --文本过滤和处理
  8. php+数组转换函数是,php数组与字符串的转换函数大全
  9. java架构师_成为一名Java高级架构师究竟要学哪些东西??
  10. Java集合(5)--Set接口及其实现类HashSet、LinkedHashSet和TreeSet