Python 之字典常用方法
前言
前面文章讲到了列表和字符串的常用方法,有些方法看似非常简单,但是真正到用的时候还是会出问题,今天来总结一些字典的常用方法。
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 之字典常用方法相关推荐
- 【python】字典常用方法
目录 前言 添加 修改 删除 update() setdefault() get() keys() values() items() copy() pop() popitem() clear() 可变 ...
- python中字典的键是唯一的吗_python 零散记录(四) 强调字典中的键值唯一性 字典的一些常用方法...
dict中键只有在值和类型完全相同的时候才视为一个键: mydict = {1:1,'':1} #此时mydict[1] 与 mydict['1']是两个不同的键值 dict的一些常用方法: clea ...
- python字典的常用方法有哪些_python中字典常用方法
# -*- coding: utf-8 -*- """ Created on Fri Jul 24 09:37:44 2020 答疑: 李立宗 lilizong@Gmai ...
- Python random模块常用方法的使用
Python random模块常用方法的使用 Python 的random模块包含许多随机数生成器. random是Python标准库之一,直接导入即可使用.本文介绍random中常用方法的用法. 一 ...
- python基础—字典
阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由"键-值"对组成的集合,字典中的"值"通过"键"来引用 ...
- Python Selenium Webdriver常用方法总结
Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: m ...
- python 存储字典_python 字典存储
Python学习笔记--元组.列表和字典的使用笔记 Python学习笔记--元组.列表和字典的使用笔记 最近开始学习python语言,所以在学习中做了一些记录,这次讲的是元组.列表和字典的基础操作和区 ...
- python复制字典_python字典复制
python学习系列--深拷贝和浅拷贝 概念 普通情况下,复制一个对象是不会新开辟内存空间的,只是把新的对象名称指向原有的内存地址,这种操作其实不是算是拷贝,只是新的引用.把新的对象置于新的内存空间中 ...
- python 判断字典是否包含某个key,以及对应的value 值
python 判断字典是否包含某个key 可以使用 in 来判断 具体如下: num = {"a": 1, "b": 2, "c": 3} ...
最新文章
- 模型加速--Slimmable neural networks
- Swift编程语言学习10—— 枚举属性监视器
- 学习 protobuf(一)—— ubuntu 下 protobuf 2.6.1 的安装
- 分库分表的事务处理机制
- 电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?
- 简单参数让谷歌Chrome浏览器单进程运行
- groupby java_Java流-在GroupBy之后获取内部元素
- TX2开发板Ubuntu16.04安装中文输入法
- 三种激活函数以及它们的优缺点
- iOS怎么做性能测试,看完这个你就懂了
- Anaconda 更新pip版本
- java设置窗口图标
- 有监督学习、无监督学习以及半监督学习详解
- 日志:实现微信公众号自动问答机器人(待整理)
- 智能DNS之DNS原理与解析
- 2021年广东省安全员C证(专职安全生产管理人员)找解析及广东省安全员C证(专职安全生产管理人员)模拟考试题
- C#生成格林威治时间字符串
- 1.win7与Ubuntu文件共享工具-Samba安装及使用方法
- ~_~ 搬家啰 ~_~
- pytorch深度学习出错整理(一)