字典的介绍

字典(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. Hyper-V迁移---委派

    在Hyper-V管理器中-实时迁移,选择“使用kerberos",如图1所示 在AD中,找到Hyper-V宿主,分别设置委派,如图2所示    图1               图2

  2. 017random模块

    import  randomprint(random.random())print(random.randint(1,8))            #包括8         print(random. ...

  3. 解析csv数据导入mysql的方法

    mysql自己有个csv引擎,可以通过这个引擎来实现将csv中的数据导入到mysql数据库中,并且速度比通过php或是python写的批处理程序快的多. 具体的实现代码示例: 代码如下: load d ...

  4. 第一章 介绍Django

    Django是一个网络开发框架,有了这个框架,能是网站开发更高效有趣,能轻松的创建和维护高质量的网站应用. 这一本书的目的是使读者成为一个Django的专家.主要着重两点.第一,深入的解释Django ...

  5. Loj#572. 「LibreOJ Round #11」Misaka Network 与求和

    题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...

  6. js 获取网页宽/高度

    网页可见区域宽度: document.body.clientWidth 网页可见区域高度: document.body.clientHeight 网页可见区域宽度: document.body.off ...

  7. Java中Class类及用法

    Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...

  8. iOS之3DTouch的使用---很简单,看我就够啦~~

    3DTouch是苹果在iOS9之后新推出的功能,功能大致可以分成两种,一种是长按app的icon,会出现以下的界面,还有一种是在app内部的某个视图上使用,效果如下图. 详细的效果也可以参见微信.微信 ...

  9. 绘图驱动-OSD原理1

    OSD(On Screen Display)是屏幕显示技术的一种,用于在显示终端上显示字符.图形和图像.实现的过程为:存储器(一般为内存的一段)的内容与显示终端上的像素一一对应.这种一一对应的关系一般 ...

  10. 轻量ORM-SqlRepoEx (七)AspNetCore应用

    ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...