python源码中的学习笔记_第5章_字典
字典基础
#
# 主题:字典基础
#if __name__ == '__main__':# 字典是一种 python 数据结构# 字典以键值对(key: value)的方式存储数据,字典是一个无序的序列(排列有前后顺序)# 列表是无序序列,排列无先后顺序# 相当于 JavaScript 中的对象# 字典通过 hash 函数和键值对中的键,计算出存储位置,之后才能找到对应的值# 键值对的键时不可变序列(不能进行增删改查),如字符串、整数等# 字典和列表都是可变序列,都可以进行增删改查
创建字典
#
# 主题:创建字典
#if __name__ == '__main__':# 使用花括号scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}print(scores) # {'Bob': 100, 'Jenny': 90, 'Danny': 80}print(type(scores)) # <class 'dict'># 使用内置函数 dictstudent = dict(name = 'Liming', age = 20)print(student) # {'name': 'Liming', 'age': 20}# 空字典d = {}
获取字典的元素
#
# 主题:获取字典的元素
#if __name__ == '__main__':scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}# 使用 []print(scores['Danny']) # 80# 若键在原字典中不存在,则报错 KeyError,既无法找到对应的键# 使用 get 方法print(scores.get('Danny')) # 80# 若键在原字典中不存在,则 get 方法返回默认值 Noneprint(scores.get('我', 0)) # 0# 若键在原字典中不存在,则可以返回自定义返回值
字典元素的增删改
#
# 主题:字典元素的增删改
#if __name__ == '__main__':scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}# 判断键是否存在于原字典中print('我' in scores) # Falseprint('我' not in scores) # True# 删除字典元素del scores['Danny']print(scores) # {'Bob': 100, 'Jenny': 90}scores.clear() # 清空字典print(scores) # {} 即空字典# 添加字典元素scores['我'] = 100print(scores) # {'我': 100}scores['me'] = 99print(scores) # {'我': 100, 'me': 99}# 改写字典元素scores['我'] = 98print(scores) # {'我': 98, 'me': 99}
获取字典视图
#
# 主题:获取字典视图
#if __name__ == '__main__':scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}# keys 方法获取字典中所有的 keykeys = scores.keys()print(keys) # dict_keys(['Bob', 'Jenny', 'Danny'])print(type(keys)) # <class 'dict_keys'>print(list(keys)) # ['Bob', 'Jenny', 'Danny']# 将所有 key 组成的视图转换为列表# values 方法获取字典中所有 valuevalues = scores.values()print(values) # dict_values([100, 90, 80])print(type(values)) # <class 'dict_values'>print(list(values)) # [100, 90, 80]# items 方法获取字典中所有 key: value 对# 下面的输出结果中的小括号是元组items = scores.items()print(items) # dict_items([('Bob', 100), ('Jenny', 90), ('Danny', 80)])print(type(items)) # <class 'dict_items'>print(list(items)) # [('Bob', 100), ('Jenny', 90), ('Danny', 80)]
遍历字典元素
#
# 主题:遍历字典元素
#if __name__ == '__main__':scores = {'Bob': 100, 'Jenny': 90, 'Danny': 80}for item in scores:print(item, scores[item], scores.get(item)) # 第一个参数控制输出键# 第二、三个参数控制输出值
字典的特点
#
# 主题:字典的特点
#if __name__ == '__main__':d = {'name': 'Danny', 'name': 'Jenny'} # 当有相同的键时,后出现的键值对会覆盖掉前面的键值对print(d) # {'name': 'Jenny'}d = {'name': 'Smith', 'nikename': 'Smith'} # value 可以重复print(d) # {'name': 'Smith', 'nikename': 'Smith'}# 字典中的元素是无序的,所以无法在自定义位置处添加元素# 键必须是不可变对象(字符串、整数),列表不能作为键(因为列表是可变对象,无法计算哈希值)# 字典的存储空间可以根据需要动态地伸缩# 字典会浪费较大内存,是一种使用空间换时间的数据结构# 字典中第一个填入的数据不一定在字典的首位,因为需要根据数据的键计算哈希值,从而得到存储地址# 字典的存储位置与存入的先后顺序无关,而与键有关
字典生成式
#
# 主题:字典生成式
#if __name__ == '__main__':items = ['Fruits', 'Books', 'Others']prices = [96, 78, 85]d = {item.upper(): price for item, price in zip(items, prices)} # upper 方法是大写print(d) # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 85}# 若 items 或 prices 中元素个数不相等,则以元素个数少的那个为准建立字典
python源码中的学习笔记_第5章_字典相关推荐
- 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记
生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...
- CNN入门详解及TensorFlow源码实现--深度学习笔记
CNN入门详解及TensorFlow源码实现–深度学习笔记 ##一.卷积神经网络 ###1.简介 卷积神经网络是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出 ...
- android源代码 abi,Android内核源码Abi目录学习笔记
好记性不如烂笔头,今天要学习的是Android中Abi目录下的代码.下面是基本的学习的笔记的汇总. 首先是include中的头文件的说明. 在cxxabi的头文件中主要需要掌握下面的几个点: 1.这个 ...
- vue 拷贝 数组_vue源码中值得学习的方法
最近在深入研究vue源码,把学习过程中,看到的一些好玩的的函数方法收集起来做分享,希望对大家对深入学习js有所帮助.如果大家都能一眼看懂这些函数,说明技术还是不错的哦. 1. 数据类型判断 Objec ...
- python提取发票信息发票识别_(附完整python源码)基于tensorflow、opencv的入门案例_发票识别二:字符分割...
(附完整python源码)基于tensorflow.opencv的入门案例_发票识别二:字符分割 发布时间:2018-05-14 20:16, 浏览次数:1201 , 标签: python tenso ...
- 《Python源码剖析》读书笔记
<Python源码剖析>电子书下载 http://download.csdn.net/detail/xiarendeniao/5130403 Python源码在官网有下载链接,用ctags ...
- stl源码剖析_《STL源码剖析》学习笔记——空间配置器
目录 1. 空间配置器概述 2. 构造和析构基本工具 3. 空间的配置与释放,std::alloc 4. 内存基本处理工具 1. 空间配置器概述 从STL的实现角度来看,空间配置器的位置尤为重要,整个 ...
- puppet最新源码包安装学习笔记
最近去面试了2家大的电商网站的运维工作,公司对系统的自动化管理,虚拟化,mysql集群,系统性能的优化和shell及python编程的要求都比较高,虽然没有面试成功,但也明白了2013年自己学习的目标 ...
- 源码 状态机_LLVM学习笔记(1)--初探源码
一直耳闻LLVM相比于GCC: well documented 架构灵活,前后端解耦符合龙书的讲解 昨天读到了一篇虽然概括却很周到的llvm入门导引 陈钦霖:LLVM Pass入门导引zhuanla ...
- 从Mybatis源码中,学习到的10种设计模式
一.前言:小镇卷码家 总有不少研发伙伴问小傅哥:"为什么学设计模式.看框架源码.补技术知识,就一个普通的业务项目,会造飞机不也是天天写CRUD吗?" 你说的没错,但你天天写CRUD ...
最新文章
- myeclipse同时部署两个项目-permgen space
- Django实现对数据库数据增删改查(一)
- Linux shell脚本编程(二)
- C# 发送邮件的记录(qq,126,Gmail)
- P2657-[SCOI2009]windy数【数位dp,dfs】
- Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
- node 安装 webpack
- Ubuntu编写开机自启动脚本(转载)
- C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上)
- java正则表达式笔记_java正则表达式笔记
- ubuntu配置LAMP
- Docker入门命令:开发人员版
- Threat Risk Modeling Learning
- 有关风向及风向处理的笔记
- 使用mysqldump备份数据库
- 单点登录(Single Sign On)
- java .class 反编译工具推荐
- winzip15.0注册码
- git官网下载太慢解决方法
- Linux的安装与Linux下PHP开发环境的搭建(LAMP)