数据类型划分

数据类型可分为:可变数据类型,不可变数据类型

不可变数据类型:bool、int、str、元祖         --  不可变数据类型又称为可哈希的

可变数据类型:list、dict、set                       --  不可哈希的

dict

key  必须是不可变数据类型,即可哈希的

value  可以是任意数据类型

dict  特点:

  • key的查询是通过二分查找方式进行的,因此查询速度很快
  • 用于存储大量关系型数据
  • 无序的

1、增

  • 直接赋值,dic[键] = 值,如果原来不存在该键则添加,有则值覆盖
  • setdefault(k, d=None)  --  有该键则不做改变,没有则添加该key,并赋默认值,默认值不设置默认为None。例:
dic = {
'name': 'tangtang',
'age': 18,
'gender': 'female'
} dic.setdefault('age', 20)
dic.setdefault('hobby')
dic.setdefault('height', 170)
print(dic)

结果:

2、删

  • pop(k, d=None)  --  按键删除,返回key对应的value。源代码注释:
  D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
  If key is not found, d is returned if given, otherwise KeyError is raised

   通常习惯设置d = None

  • popitem()  --  随机删除,以元祖形式返回键值。源代码注释:
  D.popitem() -> (k, v), remove and return some (key, value) pair as a
  2-tuple; but raise KeyError if D is empty.

   以元祖形式返回键值。源代码注释:

  • del dic[键]  --  没有该键会报错
  • del dict变量名  --  删除整个dict
  • clear()  --  清空字典

3、改

  • 直接修改,dic[键] = 值,没有则增加,同‘增’
  • update(E=None, **F)  --  括号中的内容更新原dict,仔细阅读源代码注释:
  D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
  If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
  If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
  In either case, this is followed by: for k in F: D[k] = F[k]

4、查

  • dict.keys()  -- 得到所有的键
  • dict.values()  --  得到所有的值
  • dict.items()  --  得到所有的键值对,以set中嵌套2-tuple展示
  • for ... in ... :

    1、for i in dict:  --  i 循环的是键

    2、for i in dict.keys  --  同上,循环键

    3、for i in dict.values --  循环值

    3、for i in dict.items() / for k, v in dict.items()  --  循环键值

  • 获取dict中某个键的值,可以直接使用dict[键],但在不存在该键的情况下会报错,无解,而get方法不同
  • dict.get(k, d=None)  --  获取某个键的值,这种用法在没有该键时不会报错,默认返回None,可自定义。源代码注释:
  D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

最后,对dict的嵌套不再细说

小知识

  • 有 a = 1, b = 2,在python中如何用最简单的方式将a、b值互换:

    a, b = b, a  这种方式是最简单的,也是让人容易理解的方式,或者在没学其他语言前,应该就觉得是这么写吧。底层具体的封装没去查

    可看出python程序比java、c都简单得多了,程序也不容易出错

    还包括:a, b = 1, 2 / a, b = (1, 2) / a, b = [1, 2] / a, b = [1, 2], [3, 4]

    等,都是合理的赋值方式

  • for ... in ... 循环,如果循环序列是字符串,则在开始循环时就已经固定循环内容,即使循环中对字符串做了修改操作,循环内容依然是原字符串。例:
s = 'abcdabc'
for i in s:
print(i)
s = ''
print(s)

  结果:

  

  这是因为字符串是不可变类型,在循环过程中虽然对字符串做了修改,只是变量指向了新的字符串,原字符串依然在内存中,循环的依然是原字符串

Python学习 day05的更多相关文章

  1. Python学习day05 - Python基础(3) 格式化输出和基本运算符

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  2. python学习 day05打卡

    今天可变学习的主要内容是 : 本节主要内容: 1.字典的简单介绍 2.字典增删改查和其他操作 3.字典的嵌套 一.字典的简单介绍 字典(dict)是pytho中唯一的一个映射类型.它是以{}括起来的键 ...

  3. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  4. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  5. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  6. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  7. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  8. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  9. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

随机推荐

  1. 六、Note开发工具Visual Studio Code下载安装以及Visual Studio Code的使用

    专业的人干专业的事,我们搞Node总不能真的使用文本编辑器傻乎乎的搞吧,文本编辑器来开发Node程序,效率太低,运行Node程序还需要在命令行单独敲命令.如果还需要调试程序,就更加麻烦了.所以我们需要 ...

  2. 动态内存分配存在的问题(内存空洞)------c++程序设计原理与实践(进阶篇)

    new的问题究竟在哪里呢?实际上问题出在new和delete的结合使用上.考察下面程序中内存分配和释放过程: while(1){ Big* p=new big; //...... Small* n1= ...

  3. Google浏览器历史版和下载地址

    Google浏览器历史版本下载地址https://www.slimjet.com/chrome/google-chrome-old-version.php google webdriver下载地址分享 ...

  4. html->head->body

    ps:大师兄的博客链接http://www.imdsx.cn/ http://ui.imdsx.cn/html/ html 相当于一个人 css 相当于为这个人穿上漂亮的衣服,化妆 js    相当于 ...

  5. Dancing Links算法(舞蹈链)

    原文链接:跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题 作者:万仓一黍 出处:http://grenet.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但 ...

  6. python之freshman00

    编译型vs解释型 编译型优点:编译器一般会有预编译的过程对代码进行优化.因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高.可以脱离语言环境独立运行.缺点:编译之后如果需要修改就需要整 ...

  7. CentOS 6.* 安装node

    CentOS6 安装node 使用node -v 是报错 ./node: error while loading shared libraries: libstdc++.so.6: cannot op ...

  8. Spring学习笔记(五)—— Spring整合JDBC

    一.Spring对JDBC的支持 Spring提供了很多模板整合Dao技术 与JDBC的整合中,Spring中提供了一个可以操作数据库的对象——JdbcTemplate,该对象封装了JDBC技术,与D ...

  9. [BZOJ 5415] 归程

    一棵KrusKal重构树,然而我数组开小了,忘记清空一个标记 洛谷传送门 BZOJ传送门 ......好像成权限题了Orz 回顾我们用KrusKal做生成树的时候,我们将边排序后连通各个连通块,那么边 ...

  10. C# 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。这个错误是什么原因引起的?

    C# 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.这个错误是什么原因引起的? 2011-12-17 22:45 提问者: 匿名|浏览次数:6056次 我来帮他解答 图片 符号 ...