字典的介绍

字典(dict)是python中唯一的一个映射的数据类型,它是以一对一对的键值对的形式组成的一个容器,在python中字典也是可变的,我们也可以在字典中存放各种类型的数据。

  • 哈希算法:在存放一个字典时是先根据key计算出一个内存地址,然后将key:value保存在这个内存地址中,这种算法被称为哈希(hash)算法。

  • 字典中的key必须是可hash的,也就是字典的值必须具有唯一性.

  • 可hash:可hash的意思可以理解为具有唯一性的,一种数据集如果它具有可hash的特性,那这个数据集中的数据肯定具有唯一性
  • 可hash数据: int、str、tuple、bool
  • 不可hash数据:list、dict、set

1. 字典的创建

In [1]: d1 = {'a':1, 'b':2}

In [2]: d2 = {1: 'a', 2: 'b'}

In [3]: d3 = {(1,): 'a', 2:'b'}            # 使用数字、字符串、和元组作为键值时不会报错

In [4]: d3
Out[4]: {(1,): 'a', 2: 'b'} In [5]: d4 = {[1,2]: 'a', 3:'b'} # 但是使用可变数据列表作为键值时会报unhashable type的错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-35ca200a29d3> in <module>
----> 1 d4 = {[1,2]: 'a', 3:'b'} TypeError: unhashable type: 'list' In [6]:

2. 增加元素

In [6]: d1['c'] = 3

In [7]: d1['d'] = (5, 6)                        # 增加一个元素,只需要使用dic[key] = value的方式赋值即可

In [8]: d1
Out[8]: {'a': 1, 'b': 2, 'c': 3, 'd': (5, 6)} In [9]: d1.setdefault('e', {'name': 'Jerry'}) # 也可以使用setdefault增加元素,具体使用方法下面再介绍
Out[9]: {'name': 'Jerry'} In [10]: d1
Out[10]: {'a': 1, 'b': 2, 'c': 3, 'd': (5, 6), 'e': {'name': 'Jerry'}} In [11]:

3. 删除元素

  • pop([index])
  • popitem()
  • clear()
  • del dic[index]
In [12]: d1.pop('a')                    # pop用于删除指定的对应key的值
Out[12]: 1 In [13]: d1.popitem() # 随机删除
Out[13]: ('e', {'name': 'Jerry'}) In [14]: del d1['b'] # 使用del删除对变量的引用 In [15]: d1
Out[15]: {'c': 3, 'd': (5, 6)} In [16]: d1.clear() # 清空字典 In [17]: d1
Out[17]: {} In [18]:

4. 修改元素

In [18]: d2
Out[18]: {1: 'a', 2: 'b'} In [19]: d2[2] = 'bbbb' # 使用dic[key] = value修改 In [20]: d2
Out[20]: {1: 'a', 2: 'bbbb'} In [21]: d3
Out[21]: {(1,): 'a', 2: 'b'} In [22]: d2.update(d3) # 使用update更新d2中的元素 In [23]: d2
Out[23]: {1: 'a', 2: 'b', (1,): 'a'} In [24]:

5. 查找元素

In [28]: d2
Out[28]: {1: 'a', 2: 'b', (1,): 'a'} In [29]: print(d2[(1,)])
a In [30]: print(d2[2])
b In [31]: d2.get((1,))
Out[31]: 'a' In [32]: d2.get(1)
Out[32]: 'a' In [33]:

6. 遍历字典

字典也是一种可迭代的数据类型,也可以像列表和元组一样通过for循环遍历,字典遍历时这样的:

In [34]: for ele in d2:
...: print(ele)
1
2
(1,) In [35]:

从上面的例子可以看出,直接遍历字典得到的是字典的key,其实使用字典的keys()方法也可以得到字典的kes:

In [35]: for ele in d2.keys():
...: print(ele)
1
2
(1,) In [36]:

要获取字典的value要使用values方法可以获得:

In [36]: for ele in d2.values():
...: print(ele)
a
b
a In [37]:

要同时获取key和value事可以使用item()方法或者遍历key值访问value:

In [40]: for k, v in d2.items():                # 使用items可以遍历出字典的键值对
...: print('{0} => {1}'.format(k, v))
1 => a
2 => b
(1,) => a In [41]: for k in d2.keys(): # 通过字典的key获取其值
...: print('{0} => {1}'.format(k, d2[k]))
1 => a
2 => b
(1,) => a In [42]:

补充

1. setdefault方法:

setdefault方法接收2个参数,第一个是字典的key,第二个是key对应的value值(可以不写,默认为None),如果指定的key在字典中则返回其所对应的值,如果指定的key不在字典中则增加一个以key为键第二个参数(默认为None)为值的元素到字典中。

In [42]: d3
Out[42]: {(1,): 'a', 2: 'b'} In [43]: d4 = {'a':1, 'b':2, 'c':3, 'd':4} In [44]: d4.setdefault('b', 20)
Out[44]: 2 In [45]: d4.setdefault('e') In [46]: D4
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-46-6a0e787d4f48> in <module>
----> 1 D4 NameError: name 'D4' is not defined In [47]: d4
Out[47]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': None} In [48]: d4.setdefault('f', 30)
Out[48]: 30 In [49]: d4
Out[49]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': None, 'f': 30} In [50]:

2. 封包(解构)解包

In [50]: a, b = 1, 2                  # 可以在一行给多个参数赋值,其实等号的右边是一个元组

In [51]: print(a, b)
1 2 In [52]: a, b = (1, 2) # 跟上面的效果和实现是一样的,分别给a和b赋值 In [53]: print(a, b)
1 2 In [54]: a, b, _, d = [1, 2, 3, 4] # 也可以解包列表也(不需要的参数可以使用'_'接收) In [55]: print(a, b, d)
1 2 4 In [56]: for ele in d4.items():
...: print(ele)
('a', 1)
('b', 2)
('c', 3)
('d', 4)
('e', None)
('f', 30)

通过上面的例子我们可以看到,使用解包的方法可以把容器里的数据解封装并赋值给其他元素,这样使用解包的特性遍历字典的keys和values就方便多了:

In [60]: for k, v in d4.items():
...: print(k, v)
a 1
b 2
c 3
d 4
e None
f 30 In [61]:

python学习笔记:第5天 基本数据类型之字典的更多相关文章

  1. python学习笔记(4)-基本数据类型-数字类型及操作

    大学mooc 北京理工大学 python语言程序设计课程学习笔记 一.整数类型 可正可负,没有取值范围的限制(这个与c不同,c要考虑数据类型的存储空间).如pow(x,y),计算x的y次方,pow(2 ...

  2. python学习笔记2(pycharm、数据类型)

    Pycharm 的使用 IDE(Integrated  Development  Environ ment) :集成开发环境 Vim  :经典的linux下的文本编辑器(菜鸟和大神喜欢使用) Emac ...

  3. Python学习笔记(二):数据类型

    一.python中的数据类型 python中的数据类型包括:整型.浮点型.布尔型.字符串类型 整型(int)和浮点型(float) Python中的整型只有int,没有short.long:浮点型fl ...

  4. python学习笔记(5-1)-基本数据类型-字符串类型及操作

    五.字符串处理函数  len(x):字符串x的长度.如len("12345")结果为5  str(x):任意类型x所对应的字符串形式. >>> str(123) ...

  5. python学习笔记(10)--组合数据类型(字典类型)

    理解映射: 映射是一种键(索引)和值(数据)的对应.字典是键值对的集合,键值之间无序.用大括号表示{},和dict()创建,键值对用冒号:表示. {键:值,键:值,键:值} >>> ...

  6. python学习笔记(10)--组合数据类型(序列类型)

    序列是具有先后关系的一组数据,是一维元素向量,元素类型可以不同,类似数学元素序列,元素间由序号引导,通过下标访问序列的特定元素.序列类型是一个基类类型,字符串类型,元祖类型,列表类型都属于序列类型. ...

  7. python学习笔记(10)--组合数据类型(集合类型)

    集合类型 集合是多个元素的无序组合,每个元素唯一,不存在相同类型,每个元素是不可变类型.用{}表示,元素间用逗号分隔.建立结合类型用{},或set函数,如果是空集合必须用set. >>&g ...

  8. python学习笔记(5)-基本数据类型-字符串类型及操作

    一.字符串 字符串由一对单引号或者双引号表示,如”abc“,‘中国’,字符串是字符的有序序列,可以对其中的字符进行索引.字符串也可以用三单引号或三双引号表示,可以表示多行字符串,一对单引号或双引号仅表 ...

  9. Python学习笔记020——数据库中的数据类型

    1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...

  10. python学习笔记:(七)dict(字典)常用的方法

    字典是通过名称来引用值的数据结构,这种类型的数据结构称为:映射. 字典是python中唯一的内建映射类型. 注意: 1.字典中键必须是唯一的,如果同一个键被赋值两次,会使用后一个值: 2.键必须不可变 ...

随机推荐

  1. 网络安全-使用HTTP动词篡改的认证旁路

    这个东西去年的安全扫描都没有,今天就扫出来了,非常奇怪的一个东西.好吧,找资料找原因.结果可能应为搜索名词的原因,这个问题在群友的帮助下解决了. 在我理解中servlet只有post和get方法,然后 ...

  2. 捕获Task.WhenALl返回的Task的Exception

    如果有一个任务抛出异常,则Task.WhenAll 会出错,并把这个异常放在返回的Task 中.如果多个任务抛出异常,则这些异常都会放在返回的Task 中.但是,如果这个Task 在被await 调用 ...

  3. 在win7 windows 上编译 beego 上传到 linux 去执行

    在beego的项目目录下,执行: GOOS=linux GOARCH=amd64 go build So easy!但是却搞了好久! 参考连接:http://blog.csdn.net/changji ...

  4. January 27 2017 Week 4 Friday

    Procrastination is the thief of time. 拖延是时光之贼. Procrastination is the thief of time, besides, it is ...

  5. 41. First Missing Positive (sort) O(n) time

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  6. UML用例图间关系说明

    用例间一般存在如下四种关系: 1."通信"关系(<<cmmunicate>>构造型): "通信"关系:使用实心的关联线或带<< ...

  7. Intellij IDEA Organize Imports

    使用Eclipse进行开发时,我喜欢用Ctrl + Shift + O快捷键管理Java类的导入,它可以导入所需的Java类,去除不需要的Java类. Eclipse的Organize Imports ...

  8. nrf52840蓝牙BLE5.0空中数据解析

    一.基础知识: 我没找到蓝牙5.0的ATT数据格式图片,在蓝牙4.0的基础上做修改吧,如下图所示:   二.测试与分析: 参数设置: data length = 251字节,MTU = 247字节, ...

  9. Hive之数据类型

    Hive之数据类型   (本文是基于多篇文章根据个人理解进行的整合,参考的文章见末尾的整理) 数据类型 Hive支持两种数据类型,一类叫原子数据类型,一类叫复杂数据类型.原子数据类型包括数值型.布尔型 ...

  10. 使用GraphViz画caffe网络结构图

    参考http://blog.csdn.net/happynear/article/details/45440709 1. 安装pydot: sudo pip install pydot 2. 安装Gr ...