前言

前面文章讲到了列表和字符串的常用方法,有些方法看似非常简单,但是真正到用的时候还是会出问题,今天来总结一些字典的常用方法。

1.clear

方法 clear 删除所有的字典项,这种方法是就地执行,没有返回值。
示例如下:

>>> a = {'name':'jack','age':12}
>>> a.clear()
>>> a
{}

这个方法有什么用呢,接着来看两个场景:

>>> a = {}
>>> b = a
>>> a['name'] = 'jack'
>>> a
{'name': 'jack'}
>>> b
{'name': 'jack'}
>>> a = {}
>>> b
{'name': 'jack'}

另一个场景:

>>> a = {}
>>> b = a
>>> a['name'] = 'jack'
>>> b
{'name': 'jack'}
>>> a.clear()
>>> b
{}

这两个场景中,a 和 b 都指向同一个字典,在第一个场景中,通过将一个空字典赋值给 a 来清空,这对 b 没有任何影响,它依然指向原来的字典,但要删除原来字典中的所有元素,必须用 clear 方法。

2. copy

方法 copy 返回一个新字典。其键值对和原来的字典相同,这个方法执行的是浅复制,因为值本身是原件,而非副本。
来看看示例:

>>> a = {'name':'jack','age':12}
>>> b = a.copy()
>>> b['name'] = 'mark'
>>> a
{'name': 'jack', 'age': 12}
>>> b
{'name': 'mark', 'age': 12}

上面试执行替换操作。

>>> a = {'name':'jack','age':12}
>>> b = a.copy()
>>> b['addr'] = 'china'
>>> a
{'name': 'jack', 'age': 12}
>>> b
{'name': 'mark', 'age': 12, 'addr': 'china'}

上面是执行新增操作。

>>> a = {'name':['jack'],'age':12}
>>> b = a.copy()
>>> b['name'].append('xxx')
>>> a
{'name': ['jack', 'xxx'], 'age': 12}
>>> b
{'name': ['jack', 'xxx'], 'age': 12}

这里是执行新增操作。
通过上三个示例可以看出,当替换和新增副本中的值时,原件不受影响,然后,如果修改副本中的值(就地修改而不是替换),原件也将会发生变化,因为原件指向的也是被修改的值。

为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值。可使用模块 copy 中的函数 deepcopy

>>> from copy import deepcopy
>>> a = {'name':['jack'],'age':12}
>>> b = deepcopy(a)
>>> c = a.copy()
>>> a['name'].append('mark')
>>> a
{'name': ['jack', 'mark'], 'age': 12}
>>> b
{'name': ['jack'], 'age': 12}
>>> c
{'name': ['jack', 'mark'], 'age': 12}

3.fromkeys

方法 fromkeys 创建一个新字典,其中包含指定的键,且每个键对应的值都是 None
示例:

>>> dict.fromkeys(['name','age'])
{'name': None, 'age': None}
>>> dict.fromkeys(['name','age'],'(Unknow)')
{'name': '(Unknow)', 'age': '(Unknow)'}

如果不想使用默认值 None,可提供特定的值,如上面的’(Unknow)’

4.get

get 为访问字典提供了宽松的环境,通常,如果访问字典中没有的项将会引发错误,这时候就可以用 get 方法了,get 在访问不存在的键时,没有引发异常,而是返回None,还可以指定默认值。

>>> a = {}
>>> a["name"]
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: 'name'

使用 get 就可以避免这些问题。

>>> a = {}
>>> a.get("name")
>>> print(a.get("name"))
None
>>> print(a.get("name",'jack'))
jack

如果字典中包含健值,get 的作用与普通字段查找相同。
所以建议在访问字典的时候,尽可能的用 get 方法,减少不必要的错误。

5.items

items 返回一个包含所有字典项的列表,其中每个元素都是(key,value)的形式,字典项在列表中的排列顺序不确定

>>> a = {'name':'jack','age':12,'addr':'china'}
>>> a.items()
dict_items([('name', 'jack'), ('age', 12), ('addr', 'china')])

返回值属于一种名为字典视图的特殊类型,字典视图可以用于迭代,另外还可以确定其长度以及对其执行成员资格检查,如下:

>>> a = {'name':'jack','age':12,'addr':'china'}
>>> it = a.items()
>>> len(it)
3
>>> ('name','jack') in it
True

视图的一个优点是不复制,它始终是底层字典的反映,即便是修改了底层字典亦是如此。
上面这段话可能不太好理解,来看个示例:

>>> a
{'name': 'mark', 'age': 12, 'addr': 'china'}
>>> it = a.items()
>>> it
dict_items([('name', 'mark'), ('age', 12), ('addr', 'china')])
>>> a['name'] = 'jack'
>>> it
dict_items([('name', 'jack'), ('age', 12), ('addr', 'china')])

上面示例中,当字典 a 中的值已经修改过后,这时候无需再次给 it赋值,直接输出就是最新的结果。这是字典视图的一个优点,它不是简单的复制,而是始终是底层字典的反映。

如果要将字典视图复制到列表中,可以这样:

>>> lst = list(a.items())
>>> lst
[('name', 'jack'), ('age', 12), ('addr', 'china')]

6.keys

方法 keys 返回一个字典视图,其中包含字典的所有键。

>>> a = {'name': 'jack', 'age': 12, 'addr': 'china'}
>>> a.keys()
dict_keys(['name', 'age', 'addr'])

7.pop

方法 pop 可用于获取与指定键相关联的值,并将该键值从字典中删除。

>>> a = {'name': 'jack', 'age': 12, 'addr': 'china'}
>>> a.pop('age')
12
>>> a
{'name': 'jack', 'addr': 'china'}

8.popitem

方法 popitem 类似于 list.pop,但是 list.pop弹出来的是最后一个值,而字典的 popitem 弹出来的是随机字典项,因为字典的顺序是不确定的。

>>> a
{'name': 'jack', 'addr': 'china'}
>>> a.popitem()
('addr', 'china')
>>> a
{'name': 'jack'}

9.setdefault

方法 setdefault 有点像 get,因为它获取与指定键相关联的值,但除此之外,setdefault 还在字典不包含指定的键时,在字典中添加指定的键值对。

>>> a = {}
>>> a.setdefault('name','jack')
'jack'
>>> a
{'name': 'jack'}

这和 get 不太一样,如果字典不包含指定的键,就会自动在字典中添加指定的键值对。
如果字典中已经存在了键值对,那么保持字典不变。

>>> a = {}
>>> a['name'] = 'mark'
>>> a.setdefault('name','jack')
'mark'
>>> a
{'name': 'mark'}

10.update

update 使用一个字典中的项来更新另一个字典。

>>> a = {'name':'jack','age':12}
>>> b = {'name':'mark'}
>>> c = {'addr':'china'}
>>> a.update(b)
>>> a
{'name': 'mark', 'age': 12}
>>> a.update(c)
>>> a
{'name': 'mark', 'age': 12, 'addr': 'china'}

11.values

方法 values返回一个有字典中的值组成的字典视图,不同于方法 keys,values 返回的视图可能包含重复的值。

>>> a
{'name': 'mark', 'age': 12, 'addr': 'china'}
>>> a.values()
dict_values(['mark', 12, 'china'])

Python 之字典常用方法相关推荐

  1. 【python】字典常用方法

    目录 前言 添加 修改 删除 update() setdefault() get() keys() values() items() copy() pop() popitem() clear() 可变 ...

  2. python中字典的键是唯一的吗_python 零散记录(四) 强调字典中的键值唯一性 字典的一些常用方法...

    dict中键只有在值和类型完全相同的时候才视为一个键: mydict = {1:1,'':1} #此时mydict[1] 与 mydict['1']是两个不同的键值 dict的一些常用方法: clea ...

  3. python字典的常用方法有哪些_python中字典常用方法

    # -*- coding: utf-8 -*- """ Created on Fri Jul 24 09:37:44 2020 答疑: 李立宗 lilizong@Gmai ...

  4. Python random模块常用方法的使用

    Python random模块常用方法的使用 Python 的random模块包含许多随机数生成器. random是Python标准库之一,直接导入即可使用.本文介绍random中常用方法的用法. 一 ...

  5. python基础—字典

    阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由"键-值"对组成的集合,字典中的"值"通过"键"来引用 ...

  6. Python Selenium Webdriver常用方法总结

    Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: m ...

  7. python 存储字典_python 字典存储

    Python学习笔记--元组.列表和字典的使用笔记 Python学习笔记--元组.列表和字典的使用笔记 最近开始学习python语言,所以在学习中做了一些记录,这次讲的是元组.列表和字典的基础操作和区 ...

  8. python复制字典_python字典复制

    python学习系列--深拷贝和浅拷贝 概念 普通情况下,复制一个对象是不会新开辟内存空间的,只是把新的对象名称指向原有的内存地址,这种操作其实不是算是拷贝,只是新的引用.把新的对象置于新的内存空间中 ...

  9. python 判断字典是否包含某个key,以及对应的value 值

    python 判断字典是否包含某个key 可以使用 in 来判断 具体如下: num = {"a": 1, "b": 2, "c": 3} ...

最新文章

  1. 模型加速--Slimmable neural networks
  2. Swift编程语言学习10—— 枚举属性监视器
  3. 学习 protobuf(一)—— ubuntu 下 protobuf 2.6.1 的安装
  4. 分库分表的事务处理机制
  5. 电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?
  6. 简单参数让谷歌Chrome浏览器单进程运行
  7. groupby java_Java流-在GroupBy之后获取内部元素
  8. TX2开发板Ubuntu16.04安装中文输入法
  9. 三种激活函数以及它们的优缺点
  10. iOS怎么做性能测试,看完这个你就懂了
  11. Anaconda 更新pip版本
  12. java设置窗口图标
  13. 有监督学习、无监督学习以及半监督学习详解
  14. 日志:实现微信公众号自动问答机器人(待整理)
  15. 智能DNS之DNS原理与解析
  16. 2021年广东省安全员C证(专职安全生产管理人员)找解析及广东省安全员C证(专职安全生产管理人员)模拟考试题
  17. C#生成格林威治时间字符串
  18. 1.win7与Ubuntu文件共享工具-Samba安装及使用方法
  19. ~_~ 搬家啰 ~_~
  20. pytorch深度学习出错整理(一)

热门文章

  1. LeetCode_每日一题今日份_410.分割数组的最大值
  2. 我们在大学图书馆发现了三本有毒的书
  3. 达索系统“体验时代中的制造业”大型活动探索工业数字化转型
  4. 推荐一个SAM文件中flag含义解释工具--转载
  5. Mysql学习总结(25)——MySQL外连接查询
  6. windows2003 DNS服务器配置
  7. Spanning-tree Potocol(整理)
  8. 正则表达式收藏(五)之微软的正则
  9. 史上最全的SpringBatch学习教程
  10. linux fedora35禁用或启用仓库