dict

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. #dict
  5. >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
  6. >>> d['Michael']
  7. 95
  8. >>> d['Adam'] = 67
  9. >>> d['Adam']
  10. 67
  11. >>> d['Jack'] = 90
  12. >>> d['Jack']
  13. 90
  14. >>> d['Jack'] = 88
  15. >>> d['Jack']
  16. 88
  17. >>> d['Thomas']
  18. Traceback (most recent call last):
  19. File "<stdin>", line 1, in <module>
  20. KeyError: 'Thomas'
  21. >>> 'Thomas' in d
  22. False
  23. >>> d.get('Thomas') # 这里返回None,命令交互行不会显示
  24. >>> d.get('Thomas', -1) #返回子集指定的value
  25. -1
  26.  
  27. >>> d.pop('Bob') #pop(key)方法,对应的value都会删除
  28. 75
  29. >>> d
  30. {'Jack': 88, 'Tracy': 85, 'Michael': 95, 'Adam': 67}

dict内部存放的顺序和key放入的顺序是没有关系的

和list相比较,dict有以下几个特点:

1.查找和插入的速度极快,不会顺着key的增加而增加

2.需要占用大量的内存,内存浪费多

而list相反:

1.查找和插入的时间随着元素的增加而增加;

2.占用空间小,浪费内存很少。





所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方。

需要牢记的第一条就是dict的key必须是不可变对象。

这是因为dict根据key来计算value的存储位置,如果每次计算

相同的key得出结果不同,那dict内部就完全混乱了。这个通过key

计算位置的算法就是哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。

在Python中,字符串、整数等都是不可变的。

而list是可变的,就不能作为key。

  1. >>> key = [1, 2, 3]
  2. >>> d[key] = 'a list'
  3. Traceback (most recent call last):
  4. File "<stdin>", line 1, in <module>
  5. TypeError: unhashable type: 'list'

set

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. #创建set需要提供一个list作为输入集合
  5. >>> s = set([1, 2, 3])
  6. >>> s
  7. {1, 2, 3}
  8. >>> s = set([1, 1, 2, 2, 3, 3]) #重复元素在set中自动被过滤
  9. >>> s
  10. {1, 2, 3}
  11.  
  12. >>> s.add(4) #添加元素
  13. >>> s
  14. {1, 2, 3, 4}
  15. >>> s.add(4) #添加重复元素,不会有效果
  16. >>> s
  17. {1, 2, 3, 4}
  18. >>> s.remove(4) #删除元素
  19. >>> s
  20. {1, 2, 3}
  21. >>> s1 = set([1, 2, 3])
  22. >>> s2 = set([2, 3, 4])
  23. >>> s1 & s2 #交集
  24. {2, 3}
  25. >>> s1 | s2 #并集
  26. {1, 2, 3, 4}
  27.  
  28. #再谈不可变对象
  29. >>> a = ['c', 'b', 'a']
  30. >>> a.sort()
  31. >>> a
  32. ['a', 'b', 'c']
  33. >>> a = 'abc'
  34. >>> b = a.replace('a', 'A') #这里虽然对a进行操作
  35. #但是实际是产生了一个新字符串,并让b指向新字符串
  36. >>> b
  37. 'Abc'
  38. >>> a
  39. 'abc'

对于不可变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容,相反,这些方法会创建新的对象并返回,这样,就保证了不可变本身永远是不可变的。

Python学习笔记 - dict和set的更多相关文章

  1. Python学习笔记—Dict和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...

  2. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  3. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  4. 【python学习笔记】4.字典:当索引不好用时

    [python学习笔记]4.字典:当索引不好用时 字典是python中唯一内建的map类型 创建: key可以为任何不可改变的类型,包括内置类型,或者元组,字符串 通过大括号: phonebook={ ...

  5. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

  6. Deep learning with Python 学习笔记(1)

    深度学习基础 Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据 ...

  7. Python学习笔记_Python对象

    Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...

  8. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  9. Python 学习笔记(下)

    Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...

随机推荐

  1. 如何搭建samba服务?

    为了日后便于查询,本文所涉及到的所有命令集合如下: chkconfig iptables off #关闭防火墙命令 在Centos7中使用的是chkconfig firewalld off seten ...

  2. 剑指架构师系列-持续集成之Maven实现项目的编译、发布和部署

    Maven组织项目进行编译.部署 Maven项目基本的结构说明如下: mazhi  // 控制所有荐的编译.部署.发布 mazhi-app-parent  // 项目的父项目,有一些公共的设置可以被子 ...

  3. ES6(数据结构_2)

    数据结构—2 Map 与 Array 的对比 Set 与 Array的对比 Map 与 Object 的对比 Set 与 Object 的对比 (增.查.改.删) 一.Map 与 Array 的对比 ...

  4. [转载]致创业者:APP已死 服务永生

    前几日,有位创业者和我讲他在带领团队做一个将爱踢球的人集中在一起的App,我告诉他你的创业方向错了.原因在于你的目的是要为爱踢球的人提供服务,而你现在却在竭尽全力的做App,你应该做的是设计你为爱踢球 ...

  5. 用python爬了自己的微信,原来好友都是这样的!

    偶然了解到Python里的itchat包,它已经完成了wechat的个人账号API接口,使爬取个人微信信息更加方便.鉴于自己很早之前就想知道诸如自己微信好友性别比例都来自哪个城市之类的问题,于是乎玩心 ...

  6. Bootstrap3 表单-基本表单

    单独的表单控件会被自动赋予一些全局样式.所有设置了 .form-control 类的 <input>.<textarea> 和 <select> 元素都将被默认设置 ...

  7. MySQL系列教程(四)

    文件打开数(open_files) 我们现在处理MySQL故障时,发现当Open_files大于open_files_limit值时,MySQL数据库就会发生卡住的现象,导致Nginx服务器打不开相应 ...

  8. Python实现数据库一键导出为Excel表格

    依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为ex ...

  9. Sublime text 添加lua

    tools ->build system->new build system... 输入: { "cmd": ["C:\\lua\\lua53.exe&quo ...

  10. 漏洞挖局利器-Fuzz技术介绍

    模糊测试的定义 模糊测试定义为"通过向应用提供非预期的输入并监控输出中的异常来发现软件中的故障(faults)的方法". 典型而言,模糊测试利用自动化或是半自动化的方法重复地向应用 ...