dict

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#dict
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
>>> d['Adam'] = 67
>>> d['Adam']
67
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
>>> d['Thomas']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
>>> 'Thomas' in d
False
>>> d.get('Thomas') # 这里返回None,命令交互行不会显示
>>> d.get('Thomas', -1) #返回子集指定的value
-1

>>> d.pop('Bob') #pop(key)方法,对应的value都会删除
75
>>> d
{'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。

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

set

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#创建set需要提供一个list作为输入集合
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
>>> s = set([1, 1, 2, 2, 3, 3]) #重复元素在set中自动被过滤
>>> s
{1, 2, 3}

>>> s.add(4) #添加元素
>>> s
{1, 2, 3, 4}
>>> s.add(4) #添加重复元素,不会有效果
>>> s
{1, 2, 3, 4}
>>> s.remove(4) #删除元素
>>> s
{1, 2, 3}
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2 #交集
{2, 3}
>>> s1 | s2 #并集
{1, 2, 3, 4}

#再谈不可变对象
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
>>> a = 'abc'
>>> b = a.replace('a', 'A') #这里虽然对a进行操作
#但是实际是产生了一个新字符串,并让b指向新字符串
>>> b
'Abc'
>>> a
'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. Android 学习笔记二 自定义按钮形状 颜色 点击渐变

    问题:自定义按钮的颜色 形状弧度  渐变效果 1.新建自定义属性button_login.xml (借鉴某大神) <?xml version="1.0" encoding=& ...

  2. SQL_CALC_FOUND_ROWS equivalent in PostgreSQL

    https://www.postgresql.org/message-id/1185863074.10580.91.camel%40linda.lfix.co.uk On Tue, 2007-07-3 ...

  3. Android服务——Service

    服务 Service 是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到服务,以与之进行 ...

  4. Lucene 查询(Query)子类

    QueryParser(单域查询) QueryParser子类对单个域查询时创建查询query,构造方法中需要传入Lucene版本号,检索域名和分词器. QueryParser parser = ne ...

  5. IP_ADD_MEMBERSHIP 失败

    /*将本机加入多播组*/ err = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof(mreq)); if (err &l ...

  6. LuaHotUpdate原理

    LuaHotUpdate原理(金庆的专栏)项目地址:https://github.com/asqbtcupid/lua_hotupdate只更新函数,不更新数据.主页上有个动画演示.限Windows平 ...

  7. Linux 高性能服务器编程——多进程编程

    问题聚焦:     进程是Linux操作系统环境的基础.     本篇讨论以下几个内容,同时也是面试经常被问到的一些问题:     1 复制进程映像的fork系统调用和替换进程映像的exec系列系统调 ...

  8. 开源框架Slidingmenu的基本使用

    转载本博客请标明出处:点击打开链接      http://blog.csdn.net/qq_32059827/article/details/52464262 侧滑菜单在开发中经常用到,而Slidi ...

  9. eclispe 导入android或者java项目出现中文乱码

    中文乱码经常是我们是一个比较麻烦的问题,对于这个问题,我想说一下我的解决思路. 1.到Windows- >Pereferences- >Genral->Workspace- > ...

  10. PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购

    不久之前,我们谈到了通过Handler与timer及TimerTask结合实现倒计时抢购列表,那个是PullToRefreshListView实现的,今天要讲的是PullToRefreshScroll ...