人生苦短,我选Python

前文传送门

小白学 Python(1):开篇

小白学 Python(2):基础数据类型(上)

小白学 Python(3):基础数据类型(下)

小白学 Python(4):变量基础操作

小白学 Python(5):基础运算符(上)

小白学 Python(6):基础运算符(下)

小白学 Python(7):基础流程控制(上)

小白学 Python(8):基础流程控制(下)

小白学 Python(9):基础数据结构(列表)(上)

小白学 Python(10):基础数据结构(列表)(下)

小白学 Python(11):基础数据结构(元组)

小白学 Python(12):基础数据结构(字典)(上)

字典内置函数 & 方法

(如果是来看表情包的,可以退出去了,本篇无表情包)

字典提供了很多内置方法对字典进行操控。

老规矩,一边看代码一边介绍。

dict.keys()

作用: 返回一个迭代器,可以使用 list() 来转换为列表,该列表包含所有的 key。

dict1 = {'name': 'geekdigging', 'age': 2}

print(dict1.keys())
print(list(dict1.keys()))
print(type(list(dict1.keys())))

结果如下:

dict_keys(['name', 'age'])
['name', 'age']
<class 'list'>

dict.values()

作用: 返回一个迭代器,可以使用 list() 来转换为列表,该列表包含所有的 value 。

print(dict1.values())
print(list(dict1.values()))
print(type(list(dict1.values())))

结果如下:

dict_values(['geekdigging', 2])
['geekdigging', 2]
<class 'list'>

dict.items()

作用: 以列表返回可遍历的(键, 值) 元组数组。

print(dict1.items())
print(list(dict1.items()))
print(type(list(dict1.items())))

结果如下:

dict_items([('name', 'geekdigging'), ('age', 2)])
[('name', 'geekdigging'), ('age', 2)]
<class 'list'>

dict.get(key, default=None)

作用: 返回指定键的值,如果值不在字典中返回 default(None) 值。

print(dict1.get('name'))
print(dict1.get('geekdigging'))

结果如下:

geekdigging
None

因为 geekdigging 并不是字典中的 key ,所以返回了默认值 None 。

dict.pop(key[,default])

作用: 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。

print(dict1.pop('age'))
print(dict1)

结果如下:

2
{'name': 'geekdigging'}

dict.setdefault(key, default=None)

作用: 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为 default 。

dict1.setdefault('age')
print(dict1)

结果如下:

{'name': 'geekdigging', 'age': None}

dict.update(dict2)

作用: 把字典 dict2 的键/值对更新到 dict 里。

dict2 = {'sex': 'male'}
dict1.update(dict2)
print(dict1)

结果如下:

{'name': 'geekdigging', 'age': None, 'sex': 'male'}

dict.clear()

作用: 删除字典内所有元素。

注意: 删除字典内所有元素,并非删除字典。

dict2.clear()
print(dict2)

结果如下:

{}

dict.copy()

作用: 返回一个字典的浅复制。

注意: 这里的 copy 是浅 copy ,有编程经验的同学估计理解起来并无难度。无经验的同学且听我慢慢道来,浅拷贝本质上拷贝的是一个引用,并非拷贝了整个内容,举例子的话就好比我有一个苹果,并且浅拷贝了一个给小明,我咬了一口我的苹果,但是小明发现他的苹果也被咬了一口。

dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
# 浅拷贝: 引用对象
dict4 = dict3
print(id(dict3))
print(id(dict4))
# 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dict5 = dict3.copy()
dict3['age'].remove(1)
print(dict3)
print(dict5)
print(id(dict3))
print(id(dict5))

结果如下:

2418990911064
2418990911064
{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [2, 3]}
2418990911064
2418991599688

这个示例理解稍有费劲儿,不着急,慢慢品,细品。

如果我想全都深 copy ,怎么做呢?

可以引入 copy 模块实现。

import copy

dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
dict6 = copy.deepcopy(dict3)
dict3['age'].remove(1)
print(dict3)
print(dict6)
print(id(dict3))
print(id(dict6))

结果如下:

{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [1, 2, 3]}
2418991602168
2418991602008

初次接触的同学,以上两个示例并不好理解,如果在理解上有问题的可以在公众号留言问我。

老生常谈再多 BB 一句,请各位同学亲自动手实践一下示例代码。

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github

示例代码-Gitee

转载声明:本博客由极客挖掘机创作,采用 CC BY 3.0 CN许可协议。可自由转载、引用,但需署名作者且注明文章出处。

小白学 Python(13):基础数据结构(字典)(下)的更多相关文章

  1. 小白学 Python(12):基础数据结构(字典)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  2. 小白学 Python(15):基础数据结构(集合)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  3. 小白学 Python(10):基础数据结构(列表)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. 小白学 Python(14):基础数据结构(集合)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  5. 小白学 Python(17):基础数据类型(函数)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. 小白学 Python(24):Excel 基础操作(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 小白学 Python(9):基础数据结构(列表)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  8. 小白学 Python(8):基础流程控制(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  9. 小白学 Python(11):基础数据结构(元组)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

随机推荐

  1. 新手学习FFmpeg - 调用API完成视频的读取和输出

    在写了几个avfilter之后,原本以为对ffmpeg应该算是入门了. 结果今天想对一个视频文件进行转码操作,才发现基本的视频读取,输出都搞不定. 痛定思痛,仔细研究了一下ffmpeg提供的examp ...

  2. 2018年蓝桥杯java b组第二题

    2.标题:方格计数 如图p1.png所示,在二维平面上有无数个1x1的小方格. 我们以某个小方格的一个顶点为圆心画一个半径为1000的圆.你能计算出这个圆里有多少个完整的小方格吗? 注意:需要提交的是 ...

  3. Python基础(十四)

    今日主要内容 装饰器扩展 有参装饰器 多个装饰器装饰一个函数 递归 一.装饰器扩展 (一)含有参数的装饰器 先来回顾一下装饰器的标准模式 def wrapper(fn): def inner(*arg ...

  4. Python攻破淘宝网各类反爬手段,采集淘宝网ZDB(女用)的销量!

    声明: 由于某些原因,我这里会用手机代替,其实是一样的! 环境: windows python3.6.5 模块: time selenium re 环境与模块介绍完毕后,就可以来实行我们的操作了. 第 ...

  5. wordpress安装主题、插件需要FTP用户名密码

    修改主目录wordpress下的wp-config.php文件,在最结尾加上 define("FS_METHOD", "direct"); define(&qu ...

  6. 1 Processing入门简介

    1 Processing入门简介 1.1 Before you start Processing是一个为开发面向图形的应用(visually oriented application)而生的简单易用的 ...

  7. MySQL数据库从复制及企业配置实践

    在实际生产中,数据的重要性不言而喻: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整 ...

  8. MySql5.5安装步骤及MySql_Front视图配置

    一.下载文件 有需要的朋友,请自行到百度云下载 链接:https://pan.baidu.com/s/13Cf1VohMz_a0czBI05UqJg 提取码:cmyq 二.安装MySql 2.1.运行 ...

  9. BZOJ 1345: [Baltic2007]序列问题Sequence

    1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1180  Solved: 633[Subm ...

  10. Color Length UVALive - 5841

    题文:见网页:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=sho ...