day3_字典
一、说明
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
dict = {key1:value1,key2:value2}
字典的特性:
字典是无序的,因为它没有下标,用key来当索引,所以是无序的
字典的key必须是唯一的,因为它是通过key来进行索引的,所以key不能重复,天生就去重
字典的查找速度非常快。
备注:字典里key value都是成对出现的, 不能只有key没有value 如果value是空,可如下定义:
dict1 = {1:''}
二、字典的增加
1、普通的增加
如果这种增加key已经在字典中存在,则会覆盖原值
实例:
dict = {'name':'小红','phone':'188','sex':'女'}
print(dict)
dict['addr']='北京' #增加一个键值对,如果字典中没有这个key,则增加上
print(dict)
dict['name']='小黑' #如果字典中有这个key,则会覆盖
print(dict)
输出:
{'name': '小红', 'sex': '女', 'phone':
'188'}
{'name': '小红', 'sex': '女', 'phone':
'188', 'addr': '北京'}
{'name': '小黑', 'sex': '女', 'phone':
'188', 'addr': '北京'}
2、setdefault()方法
返回指定键的值,如果key不在字典中,将添加key到字典中,value默认为None,如果key在字典中,就不修改字典的值了,则返回字典中key对应的值。
语法:
dict.setdefault(key[,default=None])
参数:
key -- 字典中要查找的键。
default -- 可选参数,如果指定键的值不存在时,返回该值,默认为 None。
实例1:
>>> dict = {'name':'小红','phone':'188','sex':'女'}
>>> dict.setdefault('name') #key:’name’在字典中存在,返回对应的value值‘小红’
'小红'
实例2:
dict = {'name':'小红','phone':'188','sex':'女'}
print(dict)
dict.setdefault('email','123@163.com')
#key:email在字典中不存在,会加到字典中,key对应的value为'123@163.com'
print(dict)
dict.setdefault('addr') #key:addr在字典中不存在,会加到字典中,key对应的value默认为None
print(dict)
三、修改
实例:
dict = {'name':'小红','phone':'188','sex':'女'}
dict['name']='小黑'
print(dict)
输出:
{'phone': '188', 'sex': '女', 'name': '小黑'}
四、删除
1、pop()方法
删除给定键所对应的键/值对,并返回被删除的值。给定键如果不在字典中,则必须设置一个default值,否则会报错,此时返回的就是default值。
语法:
dict.pop(key[,default])
参数
key: 要删除的键/值对所对应的键
default: 可选参数,给定键不在字典中时必须设置,否者会报错(没有默认值),此时返回default值,
实例:
dict = {'name':'小红','phone':'188','sex':'女'}
dict.pop('name') #将'name'键值对删除
print(dict)
输出:
{'phone': '188', 'sex': '女'}
2、del命令
实例:
a = {'name':'小红','phone':'188','sex':'女'}
del a['name'] #删除某个键值对
print(a)
del a #删除字典
print(a)
#输出不了东西了,整个列表没了,把这个变量就删了,内存里已经没有了
输出:
{'sex': '女', 'phone': '188'}
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(a)
NameError: name 'a' is not defined
3、popitem()方法
随机返回并删除字典中的一个键/值对(一般删除末尾对)。
如果字典已经为空,却调用了此方法,就报出KeyError异常。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
a.popitem()
print(a)
输出:
{'name': '小红', 'phone': '188'}
4、clear()方法
用于删除字典内所有元素。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
a.clear()
print(a)
输出:
{}
五、查询
1、通过key查询
这种方式,如果key不存在,会报错
实例:
a = {'name':'小红','phone':'188','sex':'女'}
print(a['phone'])
输出:
188
2、get() 方法
Python 字典 get() 方法和 setdefault() 方法类似,返回指定键的值,如果键不在字典中,返回一个指定值,默认为None。
get() 和 setdefault() 区别: setdefault() 返回的键如果不在字典中,会添加键(更新字典),而 get() 不会添加键。
get()查找不报错,可以设置默认值
get()与第一种的区别,就是get()没有key,不报错
语法:
dict.get(key[,default=None])
参数:
key -- 字典中要查找的键。
default -- 可选参数,如果指定键的值不存在时,返回该值,默认为 None。
实例1:
dict = {'name':'小红','phone':'188','sex':'女'}
print(dict.get('sdf')) #key'sdf'在字典中不存在,返回None,但是不添加到字典中
print(dict.get('name')) #key 'name'在字典中存在,返回'name'对应的value值,'小红'
输出:
None
小红
实例2:
a = {1:'a',2:'b',3:'c'}
print(a.get(4,'sdf'))
#如果找不到4这个key,则返回sdf内容
输出:
sdf
3、判断key是否在字典中
实例:
a = {'name':'小红','phone':'188','sex':'女'}
print('name' in a) #判断这个key是否在字典中
输出:
True
六、字典的内置函数和方法
1、keys()方法
以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有的键。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
print(a.keys())
输出:
dict_keys(['phone', 'sex', 'name'])
2、values()方法
以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有值。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
print(a.values())
输出:
dict_values(['小红', '188', '女'])
3、update()方法
用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中。
用法与 Python dict() 函数相似。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
b = {1:'a',2:'b','name':'小黑'}
a.update(b)
print(a)
输出:
{'phone': '188', 'name': '小黑', 1: 'a', 2: 'b', 'sex': '女'}
4、items()方法
以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
for k,v in a.items(): #遍历字典列表,
print(k,'===>',v)
输出:
sex ===> 女
phone ===> 188
name ===> 小红
5、cmp(dict1,dict2)函数
用于比较两个字典元素。
如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1。
6、len(dict1)函数
计算字典元素个数,即键的总数。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
print(len(a))
输出:
3
7、str(dict1)函数
将值转化为适于人阅读的形式,以可打印的字符串表示。
8、tpye(dict1)函数
返回输入的变量类型,如果变量是字典就返回字典类型。
实例:
a = {'name':'小红','phone':'188','sex':'女'}
print(type(a))
输出:
<class 'dict'>
七、字典的嵌套
实例:
all_stus = {
'xiaohong':
{
'sex':'男',
'shengao':'185',
'age':'18',
'addr':'beijing',
'cars':['牧马人','911','野马','劳斯莱斯']
},
'xiaohei':
{
'sex':'女',
'shengao':'190',
'age':'30',
'addr':'shanghai',
'bags':
{
'qianbao':['LV','xxx'],
'beibao':['coach','abc']
}
}
}
all_stus['xiaohong']['cars'].append('五菱宏光') #将xiaohong下面的cars中加上五菱宏光这个车
print(all_stus['xiaohong']['cars'])
print(len(all_stus['xiaohong']['cars'])) #查询小红有几辆车
all_stus['xiaohei']['sex']='男' #将xiaohei的性别改成男
# print(all_stus)
all_stus['xiaohei']['bags']['qianbao'].pop(0) #删除xiaohei下面bags下面qianbao下的LV
print(all_stus['xiaohei']['bags']['qianbao'])
输出:
['牧马人', '911', '野马', '劳斯莱斯', '五菱宏光']
5
['xxx']
day3_字典的更多相关文章
- 【DG】Oracle_Data_Guard官方直译
[DG]Oracle Data Guard官方直译 1 Oracle Data Guard 介绍 Oracle Data Guard概念和管理10g版本2 Oracle Data Guard ...
- DVWA实验之Brute Force(暴力破解)- Low
DVWA实验之Brute Force-暴力破解- Low 这里开始DVWA的相关实验~ 有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2 ...
- Oracle错误览表
Oracle 错误总结及问题解决 ORA 本文转自:https://www.cnblogs.com/zhangwei595806165/p/4972016.html 作者@承影剑 ORA-0 ...
- Javacript实现字典结构
字典是一种用[键,值]形式存储元素的数据结构.也称作映射,ECMAScript6中,原生用Map实现了字典结构. 下面代码是尝试用JS的Object对象来模拟实现一个字典结构. <script& ...
- python 数据类型 ----字典
字典由一对key:value 组成的 python中常用且重量级的数据类型 1. key , keys, values 字典由一对key:value 组成的 python中常用且重量级的数据类型 1. ...
- 增强版字典DictionaryEx
代码 public class DictionaryEx<TKey, TValue> : IDictionary<TKey, TValue> { /// <summary ...
- python学习笔记(字符串操作、字典操作、三级菜单实例)
字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...
- python之最强王者(8)——字典(dictionary)
1.Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包 ...
- python序列,字典备忘
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
随机推荐
- Java四类八种数据类型
http://www.cnblogs.com/simplefrog/archive/2012/07/15/2592011.html 第一类:逻辑型boolean 第二类:文本型char 第三类:整数型 ...
- 关于ECMP 等价路由
1.ECMP简介 Equal-CostMultipathRouting,等价多路径.即存在多条到达同一个目的地址的相同开销的路径.当设备支持等价路由时,发往该目的 IP 或者目的网段的三层转发流量就可 ...
- Centos7 防火墙常用配置及说明
一. Centos7和Centos6 防火墙的区别: 使用的工具不一样了.Centos6 使用的是iptables ,Centos7 使用的是filewall iptables 用于过滤数据包,属于网 ...
- tar分层压缩
在Linux下使用 tar 命令来将文件打包并压缩是很通常的用法了. 可是Linux的文件系统对文件大小有限制,也就是说一个文件最大不能超过2G,如果压缩包的的内容很大,最后 的结果就会超过2G,又或 ...
- 5 -- Hibernate的基本用法 --5 2 持久化对象的状态
1. 瞬态 : 对象有new操作符创建,且尚未与Hibernate Session关联的对象被认为处于瞬态.瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识.如果程序中失去了瞬态对象的引用,瞬态 ...
- 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
- IOError: cannot open resource
在运行PIL_test.py文件的时候报错: File "PIL_test.py", line 40, in <module> font = ImageFont.tru ...
- File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).
File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1). 这 ...
- C# 如何提取字符串中的数字
下面讲解如何在字符串当中抓取到数字 方法一.使用正则表达式 1.纯数字提取 string str = "提取123abc提取"; //我们抓取当前字符当中的123 string r ...
- db first和code first
1. db first 是现有数据库,再写代码.根据数据库的表生成类. django里面:python manage.py inspectdb 2. code first 是先写代码,后创建数据库. ...