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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bms_output.put_line使用方法

https://blog.csdn.net/sxww321/article/details/4020300转载于:https://www.cnblogs.com/diyunpeng/p/10022923.html

linux 权限掩码 umask

一 权限掩码umaskumask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)写(2)+执行(1),同…

ant 构建_有用的Ant构建标签

ant 构建问题: 如何在ant文件中执行以下任务? 制作zip文件。 运行命令。 将文件复制到远程计算机。 在远程Linux机器上运行命令。 打开输入框并响应输入值。 拨打蚂蚁电话。 答案: 1.制作zip文件: 以下是在ant中制作zip文…

C++文件交互(txt、excel)

前些天完成了计算机视觉大作业,《基于双目立体视觉的深度图像生成》,虽然刚开始觉得作业很难,也没找到现成的程序,但做到最后还是学到很多知识,get到很多技能,现在一一总结下来。 1、C输出数据到txt 包含…

基类数组存放派生类_永远不要将派生类数组赋值给基类类型指针

C.152: Never assign a pointer to an array of derived class objects to a pointer to its baseC.152:永远不要将派生类数组的指针赋值给基类指针Reason(原因)Subscripting the resulting base pointer will lead to invalid object access and probably to memory corruptio…

路由器和网关的区别?

1.网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.2…

C++error:找不到指定文件

做作业遇到这样的问题:新建了一个C工程,在内部新建了a.cpp a.h文件,将另一个工程里面的内容复制了过来,但是运行显示“找不到指定文件”,找了一下,发现虽然我的项目源文件里包换这个cpp文件,但是…

MVC 1.0的可能方法

如《 Java EE 8积极路线图》中所述,Java EE 8计划中未包含MVC 1.0。 我的看法以及在JavaOne期间与我交谈过的几个人的指示,这样做的可能结果是: MVC已完全删除 MVC继续并包含在Java EE 8(JSR 366)中 MVC继续作为Ja…

ES2015 中的函数式Mixin

原文链接:http://raganwald.com/2015/06/17/functional-mixins.html 在“原型即对象”中,我们看到可以对原型使用 Object.assign 来模拟 mixin,原型是 JavaScript 中类概念的基石。现在我们将回顾这个概念,并进一步探究如何将功能…

spring中的设计模式_面试:设计模式在spring中的应用

设计模式为我们解决一类问题提供了最佳的解决方案,我们在实际工作其实不太常用到,以至于会经常想不到设计模式。究其原因都是我们只是在使用别人框架的缘故,在这些框架的代码中经常能看到设计模式的影子,我们以spring为例&#xf…

linux route命令的使用详解

route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是 为了解决以下问题:该Linux系统在一个局域网中,局…

C如何将二维数组作为返回值

做大作业遇到这样一个问题:在子函数里申请了一个二维数组,在主函数里要用到二维数组里的数据,但是在主函数里又不能提前申请(因为不知道数组长度),所以需要将数组return得到。 子函数: float **…

Spring的IOC底层实现

IOC的底层实现 续图: 转载于:https://www.cnblogs.com/phyger/p/10027712.html

python传文件给java_python使用简单http协议来传送文件

python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServer ${port}来启动服务默认的端口是8000,另外我们也可以指定端口&a…

C定义全局变量

程序工程中往往遇到这样的问题:某个变量是贯穿始终的,主函数以及不同的子函数都要用到这个变量,并且要调用子函数改变变量的值。这时候全局变量就起到一个桥梁作用,在函数外定义,在主函数中调用定义,在子函…

tensorflow(centos 7.0 64)安装

tensorflow安装 系统centos 7.0 64位: python版本:(注意tensorflow目前只支持python2.7版本) 安装pip yum update -y && yum install -y python python-devel epel-release.noarch python-pip 使用pip安装tensorflow pip install https://storag…

午餐前如何安装OpenStack Cloud

图1. QuickStart的内部工作原理 云安装程序 如果我告诉您可以在必须停下来吃午餐之前进行OpenStack Cloud环境设置,该怎么办? 您会感到惊讶吗? 你今天可以做吗? 在大多数情况下,我敢打赌您的答案是不可能的&#…

实现多线程的方式之实现Callable接口

package com.hls.juc;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * 创建多线程的方式 : 4种 * 1.继承Thread类 * 2.实现Runable接口 * 3.实现Callable接口 * 4.使用线程池创建线程 * *…

b 树查找时间复杂度_你心里是没点B树吗?

点击上方“零一视界”,选择“星标”公众号资源干货,第一时间送达1 引言数据库的增删改查等操作是开发过程中最为常见也是尤为重要的,尤其是现在大数据的兴起,导致数据存储量急剧增加,提升数据的操作效率就变得尤为关键…

Opencv imshow显示不出来图片

VSOPENCV处理图像时,imshow显示图片一片灰色,刚开始以为图片太大一直加载不出来,但是一直等不到显示出来,最后发现是因为最后忘记写 cvWaitKey(0);//或者waitKey(0);