字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

定义字典(dictionary)

info = {
'stu1101': "Amy",
'stu1102': "Bob",
'stu1103': "Cindy"
}

字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重
  • 查询速度快,比列表快多了
  • 比list占用内存多

为什么会查询速度会快呢?因为他是hash类型的,那什么是hash呢?

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法

dict会把所有的key变成hash 表,然后将这个表进行排序,这样,你通过data[key]去查data字典中一个key的时候,python会先把这个key hash成一个数字,然后拿这个数字到hash表中看没有这个数字, 如果有,拿到这个key在hash表中的索引,拿到这个索引去与此key对应的value的内存地址那取值就可以了。

增加

>>> info["stu1104"]="David" #增加
>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1104': 'David'}

删除

>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1104': 'David'}
>>> info.pop("stu1101") #标准删除
'Amy'
>>> info
{'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1104': 'David'}
>>> del info["stu1103"] #换个姿势删除,del是Python自带的,想删谁就删谁
>>> info
{'stu1102': 'Bob', 'stu1104': 'David'}
>>> info.popitem() #随机删除
('stu1104', 'David')
>>> info
{'stu1102': 'Bob'}

查找

>>> info = {'stu1101': "Amy",'stu1102': "Bob",'stu1103': "Cindy"}
>>> "stu1102" in info #标准用法,判断一个key是否在字典中存在
True
>>> info.get("stu1102") #获取
'Bob'
>>> info["stu1102"] #同上,但是看下面
'Bob'
>>> info.get("stu1105") #key不存在返回None
>>> print(info.get("stu1105"))
None
>>> info["stu1105"] #key不存在就报错,慎用
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu1105'

修改

>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy'}
>>> info["stu1101"]="Alex" #修改
>>> info
{'stu1101': 'Alex', 'stu1102': 'Bob', 'stu1103': 'Cindy'}

其他

>>> info = {'stu1101': "Amy",'stu1102': "Bob",'stu1103': "Cindy"}
>>> info.values() #输出字典中所有的value
dict_values(['Amy', 'Bob', 'Cindy'])
>>> info.keys() #输出字典中所有的key
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>> info.setdefault("stu1106","xiaoming") #查找字典中是否有stu1106,若没有则创建并为其赋值为xiaoming
'xiaoming'
>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1106': 'xiaoming'}
>>> info.setdefault("stu1101","Alex") #查找字典中是否有stu1101,若有,返回其值,且不修改
'Amy'
>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1106': 'xiaoming'}
>>> b={1:2,3:4,'stu1101':'Alex'}
>>> info.update(b) #两个字典表合并,若key有交叉则覆盖其值
>>> info
{'stu1101': 'Alex', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1106': 'xiaoming',1: 2, 3: 4}
>>> info.items() #字典转成列表
dict_items([('stu1101', 'Alex'), ('stu1102', 'Bob'), ('stu1103', 'Cindy'), ('stu1106', 'xiaoming'), (1, 2), (3, 4)])
>>> dict.fromkeys([1,2,3],'test') #通过一个列表生成默认dict,最好少用,因为有个不好解释的坑,如下
{1: 'test', 2: 'test', 3: 'test'}
>>>
>>> c=dict.fromkeys([1,2,3],'test')
>>> c
{1: 'test', 2: 'test', 3: 'test'}
>>> c[1]="aaa" #无嵌套时,只修改1对应的value
>>> c
{1: 'aaa', 2: 'test', 3: 'test'}
>>> c=dict.fromkeys([6,7,8],["aa",{"name":"Alex"},"bb"])
>>> c
{6: ['aa', {'name': 'Alex'}, 'bb'], 7: ['aa', {'name': 'Alex'}, 'bb'], 8: ['aa', {'name': 'Alex'}, 'bb']}
>>> c[7][1]["name"]="jack" #多层嵌套时,所有的key对应的value都修改,类似于列表的copy方法
>>> c
{6: ['aa', {'name': 'jack'}, 'bb'], 7: ['aa', {'name': 'jack'}, 'bb'], 8: ['aa', {'name': 'jack'}, 'bb']}

循环dict

>>> info = {'stu1101': "Amy",'stu1102': "Bob",'stu1103': "Cindy"}
>>> for key in info:
... print(key,info[key]) #方法1,高效,建议使用
...
stu1101 Amy
stu1102 Bob
stu1103 Cindy
>>> for k,v in info.items():
... print(k,v) #方法2,会先把dict转成list,数据里大时莫用
...
stu1101 Amy
stu1102 Bob
stu1103 Cindy
>>>

多级字典嵌套及操作

...

Python3学习之路~2.4 字典操作的更多相关文章

  1. Python3学习之路~2.7 文件操作

    对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 Somehow, it seems the love I knew was always the ...

  2. Python3学习之路~2.6 集合操作

    集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 >>> list1 = ...

  3. Python3学习之路~2.3 字符串操作

    字符串操作 特性:不可修改 name="my \tname is alex" print(name.capitalize()) #首字母变大写 print('Alex LI'.ca ...

  4. Python3学习之路~2.8 文件操作实现简单的shell sed替换功能

    程序:实现简单的shell sed替换功能 #实现简单的shell sed替换功能,保存为file_sed.py #打开命令行输入python file_sed.py 我 Alex,回车后会把文件中的 ...

  5. Python3学习之路~0 目录

    目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...

  6. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Python3学习之路~2.1 列表、元组操作

    列表 列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作. 定义列表(list) names=['Amy','Bob','Cindy','David'] 通过下标访问列 ...

  8. Python3学习之路~5.7 Json & pickle 模块

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...

  9. Python3学习之路~9.4 队列、生产者消费者模型

    一 队列queue 当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用. 队列的作用:1.解耦,使程序直接实现松耦合 2.提高处理效率 列表与队列都是有顺序的,但是他们之间有一个很大的区别 ...

随机推荐

  1. 2014 华为校招机试题(c/c++开发类)

    第一题: 1.2.3....n盏灯,同时有n个人, 第1个人将1的倍数的灯拉一下, 第2个人将2的倍数的灯拉一下, ...... 问最后有几盏灯是亮的, 初始状态下灯是灭的, 输入整数n(n<6 ...

  2. IOS设计模式第七篇之观察者设计模式

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 观察者设计模式 在观察者设计模式里面,一个对象通知其他的对象一些状态的改变.涉及这些对象不需要知道另一个对象---因此鼓励解耦设计模式.这个设计模式 ...

  3. 【gitlab】创建ssh 秘钥

    1).首先打开linux服务器,输入命令:ls -al ~/.ssh,检查是否显示有id_rsa.pub或者id_dsa.pub存在,如果存在请直接跳至第3步. 2).在bash中输入,注意这个地方的 ...

  4. Esper学习之八:EPL语法(四)

    关于EPL,已经写了三篇了,预估计了一下,除了今天这篇,后面还有5篇左右.大家可别嫌多,官方的文档对EPL的讲解有将近140页,我已经尽量将废话都干掉了,再配合我附上的例子,看我的10篇文章比那140 ...

  5. Promise最佳实践(转)

    本文作者:IMWeb dekuchen 原文出处:IMWeb社区 未经同意,禁止转载 有关Promise的几个问题 基础概念 一:什么是Promise 国内比较流行的看法: 阮一峰: Promise ...

  6. Python Tkinter Text控件

    原文地址: http://blog.csdn.net/bemorequiet/article/details/54743889 这篇博客主要是简单的说一下Tkinter中的Text控件的相关知识. T ...

  7. 题目1458:汉诺塔III(不一样的汉诺塔递归算法)

    题目链接:http://ac.jobdu.com/problem.php?pid=1458 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  8. sencha touch + Cordova 3.x下载文件

    今天实现了一个文件下载功能,在网上找了下资料发现有些问题. 我用的是小米1s,安卓 4.1.2,cordova 3.5,打包测试运行正常 首先在控制层launch方法中加入以下代码: // 等待加载P ...

  9. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  10. Kafka usecase

    h1, h2, h3, h4, h5, h6, p, blockquote { margin: 5px; padding: 5; } body { font-family: "Helveti ...