MyPython--基础篇--字典
在python中 字典是一系列键值对,每个键都有一个值相关联,与键相关联的可以是数字,字符串,列表甚至python中所有的对象用作字典的值。
dict = {key:value} key表示键,value表示值,中间:串联。元素之间用","隔开
python中无论这个表有多大,查询速度都不会变慢
1 dict1 = {1:'a',2:'b'} 2 print(dict1[1])
字典用{}表示,访问字典中的值通过key调用dict[key]注意访问的时候用的也是[]。
1 et_0 = {'name':'etno_0' , 'color':'green' , 'points':'5'} 2 new_points = 0 3 new_points+=int(et_0['points']) 4 print('you beat %s ,add %s points' % (et_0['name'],et_0['points']))
第一行定义了一个叫et_0的字典,储存name,color,points信息
定义了一个变量储存分数,初始值为0
变量增加,et_0 points对应的分数
打印击败的外星人的名字,最新的分数。
添加键值对
字典是一种动态结构,可随时添加键值对
dict1[key] = value 这就是添加键值对
python中key是唯一的所有当定义key一样时,后面的会把前面的替换掉。
如果key不存在就会报错
为了防止报错,我们有两个方法
1.in
dict3 = {‘cc’:23}print('bb' in dict3)
返回一个布尔类型。
2.get方法
print(dict3.get('bb')) print(dict3.get('bb','no bb'))
当不存在时,返回None,有时返回值
我们也可以设置第二个参数,当不存在的时候返回第二个参数。
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。 是无序的。
创建一个空的字典
dict2 = {},需要添加值得时候再添加
修改字典中的值
1 et_0 = {'name':'etno_0' , 'color':'green' , 'points':'5'} 2 et_0['color'] = 'red' 3 print(et_0['color'])
同样的通过key来修改对应的值
1 et_1 = {'name':'et_1','speed':'medium','x_position':0,'y_position':0} 2 if et_1['speed'] == 'medium': 3 et_1['x_position'] += 10 4 et_1['y_position'] += 10 5 elif et_1['speed'] == 'low': 6 et_1['x_position'] += 5 7 et_1['y_position'] += 10 8 else: 9 et_1['x_position'] += 15 10 et_1['y_position'] += 10 11 print('#################') 12 print(et_1['x_position'])
这里我们加了三个判断,根据speed的值来改变x_position值
删除键值对
删除,需要制定字典名和键名
del dict[key]
del et_1[position] 这里删除后就是永久删除,其他的键值不会受到影响
遍历字典
1.遍历所有的键值对
1 print('et_1 %s' % et_1) 2 print('et_1.items %s 类型%s' % (et_1.items(),type(et_1.items()))) #([('y_position', 10), ('x_position', 10), ('speed', 'medium'), ('name', 'et_1')]) 3 for key,value in et_1.items(): 4 print('%s = %s' % (key,value)) 5 for k,v in et_1.items(): 6 print('%s = %s' % (key,value))
items() 方法会返回一个键值对列表,每个元素是一个元组储存着键值对。第三行就是items返回的键值对列表
那要遍历所有的key是否要
for k,v in et_1.items():print('%s' % k)
python给我们提供了内置的函数
for x in et_1.keys():print(x)
keys() 方法可以获得字典内所有的键,同样的提取value有values()方法
for v in set(et_1.values()):print(v)
但是我们得到的值可能会有很多重复值,这里可以用set()方法来获得无重复的值的集合
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少
小练习
广告投放反馈名单,和其中参与调研的名单,名单里还有调研者年龄,对于参与调研的打印感谢,对于没有参与调研的打印邀请
![](/assets/blank.gif)
![](/assets/blank.gif)
1 canjia_name = ['cc','yy','lcc','notjoke'] 2 canjia_dname = {'cc':23,'notjoke':22} 3 for x in canjia_name: 4 if x not in canjia_dname: 5 print('% sinvite you join our report' % x) 6 else: 7 print('thanks age = %s, %s join us '%(canjia_dname[x],x))
View Code
分析:我们需要打印所有列表内的所有人,for循环,名单中参没参与调研的打印内容不同需要区分,增加if判断。
嵌套
字典列表
字典et_1中包含了一个外星人的各种信息,但无法储存第二个外星人的信息,这时就需要嵌套字典了 。
1 et_2 = {'name':'et_2','speed':'medium','x_position':0,'y_position':0,'points':15} 2 et_3 = {'name':'et_3','speed':'low','x_position':0,'y_position':0,'points':5} 3 et_all = [et_1,et_2,et_3] 4 for et in et_all: 5 print(et)
再来一个练习
输入一个数,生成这个数的外星人列表,随机颜色,难度分数
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #生成30多个外星人 2 import random 3 def et_make(et_num): 4 et_color = ['red','blue','green','black']#外星人颜色 5 et_name = []#空的外星人名字列表 6 for x in range(0,et_num):#生成所需外星人列表名 7 et_name.append('et_%s'%x) 8 et_difficult = ['low','medium','difficult']#外星人难易程度列表 9 et_points = [5,10,20]#外星人分数列表 10 et_all = []#所有外星人列表 11 for x in range(0,et_num):#for循环生成所需外星人 12 et_rnumd = random.randrange(0,len(et_difficult)) 13 et_rnumc = random.randrange(0,len(et_color)) 14 et ={ 'name':et_name[x] , 'color':et_color[et_rnumc] , 'difficult':et_difficult[et_rnumd] , 'points':et_points[et_rnumd] }#生成一个外星人 15 et_all.append(et)#将生成的外星人添加到et_all外星人列表内 16 return et_all#返回外星人列表 17 list1 = et_make(50) 18 for x in list1: 19 print(x)
View Code
SET
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以在set中没有重复的key
要创建一个set,需要提供一个list作为输入的集合
s1 = set([1,2,2,3]) print(s1)#{1,2,3}
多输入也没用,key不重复输出{1,2,3},重复元素在set中自动被过滤
添加
add(key)方法,可以重复添加但是不会有效果
s1.add('bb','gg','cc','cc') print(s1)
删除
s1.remove(1) print(s1)
set可以看出数学意义上的无序和重复元素的集合,因此,两个set可以做数学意义上的交集并集等操作
提一句方法都没有改变原变量,返回的是一个新变量,所以一般都要新变量保存一下
转载于:https://www.cnblogs.com/notJoke/p/5818134.html
MyPython--基础篇--字典相关推荐
- python语音程序设计基础篇_【笔记】python自学笔记(基础篇)——字典操作
字典:是一系列键值对,每个关键字都对应一个值,我们可以使用关键字来访问关联的值,与关键字关联 的可以是数,字符串,列表乃至字典,事实上,可将任何python对象用作字典的值 字典用放在花括号{}中的一 ...
- Kiner算法刷题记(二十一):字典树与双数组字典树(数据结构基础篇)
字典树与双数组字典树(数据结构基础篇) 系列文章导引 系列文章导引 开源项目 本系列所有文章都将会收录到GitHub中统一收藏与管理,欢迎ISSUE和Star. GitHub传送门:Kiner算法算题 ...
- Python详细介绍及使用(基础篇)
Python详细介绍及使用(基础篇) 第一章 Python基础 Python的由来:1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器.Python来自Guido所 ...
- Python Qt GUI设计:信号与槽的使用方法(基础篇—7)
目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...
- 计算机编程书籍-笨办法学Python 3:基础篇+进阶篇
编辑推荐: 适读人群 :本书适合所有已经开始使用Python的技术人员,包括初级开发人员和已经升级到Python 3.6版本以上的经验丰富的Python程序员. "笨办法学"系列, ...
- python自动化教程_Python自动化开发实战视频课程-全新基础篇_Python教程
教程名称:Python自动化开发实战视频课程-全新基础篇 课程目录: 0001.51CTO学院-01Pythons10 day1 开课前言- _* N, R+ w/ T 0001.51CTO学院-01 ...
- option:contains后面加变量_Python基础篇 -2:初识Python中的变量
Python学习基础篇 -2 前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 . 第二篇 ...
- 100内奇数之和流程图_Python进阶记录之基础篇(四)
回顾 在Python进阶记录之基础篇(三)中,我们介绍了Python中分支结构if语句的相关知识以及输入函数input()的基本用法.if语句在我们日后的编程中会经常使用到,今天我们讲一下另一个重要的 ...
- 【目录】Python 入门基础篇 <(^-^)>
Python 入门基础篇 一.关于Python的介绍与准备工作 Python基础介绍 Jupyter notebook基础介绍 Jupyter notebook打开问题 Jupyter noteboo ...
- 面试题之第一部分(Python基础篇) 80题
第一部分(python基础篇)80题 为什么学习Python?==*== # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相 ...
最新文章
- 2022-2028年中国涤纶市场投资分析及前景预测报告
- 251f与ips屏显示器对比_同样是240Hz高刷新率 有了VA屏你还会选择TN?
- idea java doc 模板_Idea配置Javadoc
- [Android] Git组件化部署
- SVM -支持向量机原理详解与实践之五
- 要管理组策略 您必须以域用户账户登录此计算机,组策略设置:使普通用户登陆域控制器的电脑...
- python精要(78)-模块与包组织(1)-绝对导入
- 角色关联权限操作-代码实现
- 填补服务机器人市场空白,九号机器人提供智能服务场景解决方案!
- 云服务器的主机名是否可以修改??
- mongodb数组更新操作符$push
- 【C++】图书管理系统(含全部源代码)
- WEB浏览器页面上可视化展示JSON数据的方法
- [转载][shell]linux常用入门命令
- 第四届高教杯计算机绘图教程,第十一届高教杯全国大学生先进成图技术与产品信息建模.PDF...
- QQ表情包,动态的那种
- 移动、电信、联通、QQ币、游戏点卡快速秒充体验
- mysql 赋权限_MySQL赋予用户权限命令总结
- 日本的养老现状,会是我们的未来吗?
- Michael Nielsen的神经网络与深度学习入门教程
热门文章
- Oracle安装后的默认账号以及一些基本操作
- ubuntu添加用户并给予sudo权限
- 07.RequestResponse
- codeforces 1003a Polycarp's Pockets
- 【极客日报】约会网站228万用户数据遭泄露;Uber 大量高管离职;周鸿祎称360曾发现特斯拉有漏洞...
- microbit V2.0兼容性相关问题记录
- Java中方法重写和重载的区别
- 浅析一种基于Android、iOS平台的移动端银行卡识别方法,简化移动支付中卡号绑定过程
- 个人用户之浪潮云服务器小白教程
- 函数参数中的3个点表示什么