一、字典

①字典是python的基础数据类型之一

②字典可以存储大量的数据,关系型数据

③字典也是python中唯一的映射类的数据类型

字典是以键值对的形式存在的,{键:值}

字典的键必须是不可变的数据类型(工作中一般是由int和str组成)

字典的值是任意数据类型,对象

数据类型的分类:

(不可哈希)可变的数据类型:列表(list)、字典(dict)、集合(set)

(可哈希)    不可变的数据类型:字符串(str)、整型(int)、布尔值(bool)、元组(tuple)

按存值个数区分:

标量/原子类型:整型、字符串

容器类型:列表、元组、字典

按访问顺序区分:

直接访问:整型

顺序访问(序列类型):字符串、列表、元组

key值访问(映射类型):字典

字典的优点:

① 字典可以存储大量的数据,关系型数据。

② 查询速度快

python3.5版本及之前版本的字典是无需的,python3.6开始字典是有序的

字典的查询(抛去小数据池的概念),任何对象的ID都不一样,字典将所用的键在内存中转为为ID,直接通过ID找到对应的值

字典是用哈希算法,比二分查找要快很多

二、字典的增删改查

# 字典的格式
dic = {'name':'xiaoming','age':18,'hobby':'football','city':'Shenzhen'}

增加

① 直接加 (前提是无相同的key值,否则会变成修改)

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
dic1['constellation'] = 'sagittarius' # 添加键值对
print(dic1) # 结果
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'constellation': 'sagittarius'}

② setdefault()

key存在的话不会做任何修改,返回键对应的值;

key不存在的话会添加键值对,只填key默认的值是None,返回值是None

key不存在的话会添加键值对,key和value都添加,返回值是value

① 键key已存在

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('name','Zhangsan')) # 返回key对应的值,不做任何的修改
print(dic1) # 结果
xiaoming
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('age'))
print(dic1) # 结果
18
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}

②键key不存在,只添加键key

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('job')) # 只添加key默认的值是None
print(dic1) # 结果
None
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': None}

③键key不存在,添加键值对

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('job','IT')) # 返回key对应的值
print(dic1) # 结果
IT
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': 'IT'}

删除

①pop()

pop()通过键key去删除键值对,有返回值,返回值是被删除键key对应的值value

如果没有此键key,没有设置第二个参数,则会报错

如果没有此键key,设置了第二个参数,返回第二个参数

键key存在

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.pop('job','已删除')) # 返回key对应的值,不会返回第二个参数
print(dic1) # 结果
IT
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}

键key不存在

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.pop('a')) # 报错
KeyError: 'a'
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.pop('a','该键key不存在')) # 返回值是第二个参数的内容
print(dic1) # 结果
该键key不存在
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': 'IT'}

② clear()     # 清空字典

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1) # 结果
{}

③ popitem()

python3.5版本及之前是随机删除一组键值对,python3.6是删除最后一组的键值对

返回值是被删除的键key和值value的元组

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.popitem()) # 返回键key和值value的组成的元组
print(dic1) # 结果
('job', 'IT')
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}

④ del

a.可以通过键key删除对应的键值对

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
del dic1['hobby']
print(dic1) # 结果
{'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}

b.可以在内存级别把整个字典删除

dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
del dic1
print(dic1) # 报错
NameError: name 'dic1' is not defined

修改

①直接修改

通过键key来修改值value

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
dic1['job'] = 'accountant' # 通过键key直接修改对应的值value
print(dic1) # 结果
{'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}

② update()

方式一:

字典1.update(字典2)        将字典2的所有键值对覆盖并添加到dic1,dic2不变

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
dic2 = {'age':20 , 'city':'Shanghai','a':3}
dic1.update(dic2) # 将dic2的所有键值对覆盖并添加到dic1,dic2不变
print(dic1)
print(dic2) # 结果
{'name': 'xiaoming', 'age': 20, 'city': 'Shanghai', 'job': 'IT', 'a': 3}
{'age': 20, 'city': 'Shanghai', 'a': 3}

方式二:

update(键=值)

键key存在会直接修改key对应的值,不存在key则直接添加键值对

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
dic1.update(name='Zhangsan',constellation='sagittarius') # 键存在会直接修改值,不存在直接添加键值对
print(dic1) # 结果
{'name': 'Zhangsan', 'age': 18, 'city': 'Beijing', 'job': 'IT', 'constellation': 'sagittarius'}

查询

① 通过键查询

若键不存在会报错

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1['name']) # 结果
xiaoming

② get()    

通过键key查询值,键key不存在不会报错

方式一:

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.get('name'))
print(dic1.get(111)) # 键不存在不会报错,返回值是None # 结果
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.get('name'))
print(dic1.get(111)) # 键不存在不会报错,返回值是None

方式二:

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.get(111,'该键不存在')) # 键不存在不会报错,返回值是第二个参数,不写第二个参数默认是None # 结果
该键不存在

③keys()

把字典所有的键放在类似于列表的容器中

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.keys()) # 结果
dict_keys(['name', 'age', 'city', 'job'])

可以转化成列表list

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
lis = list(dic1.keys())
print(lis) # 结果
['name', 'age', 'city', 'job']

可以遍历

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for i in dic1.keys():
print(i) # 结果
name
age
city
job

直接遍历字典也能获取所有的键

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for i in dic1:
print(i) # 结果
name
age
city
job

④ values()

把字典的所有值放在类似列表的容器中

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.values()) # 结果
dict_values(['xiaoming', 18, 'Beijing', 'IT'])

可以转化为列表list

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
lis = list(dic1.values())
print(lis) # 结果
['xiaoming', 18, 'Beijing', 'IT']

⑤ items()

把键和值组成元组放在类似于列表的容器中

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.items()) # 结果
dict_items([('name', 'xiaoming'), ('age', 18), ('city', 'Beijing'), ('job', 'IT')])

可以转换为列表list

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
lis = list(dic1.items())
print(lis) # 结果
[('name', 'xiaoming'), ('age', 18), ('city', 'Beijing'), ('job', 'IT')]

可以遍历(一个变量遍历出来的是键值对组成的元组)

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for i in dic1.items():
print(i) # 结果
('name', 'xiaoming')
('age', 18)
('city', 'Beijing')
('job', 'IT')

两个遍历遍历出来的分别是键和值

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for k,v in dic1.items():
print(k,v) # 结果
name xiaoming
age 18
city Beijing
job IT

三、字典的公共方法

dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(len(dic1)) # 获取字典键值对的个数 # 结果
4

四、分别赋值

a,b = 10,20         # 将a和b分别赋值
print(a,b) # 结果
10 20
a,b = [10,30]       # 将a和b分别赋值
print(a,b) # 结果
10 30
a = 100
b = 50
a,b = b,a # a 和 b 的值替换了
print(a,b) # 结果
50 100

五、字典的嵌套

Python基础Day5的更多相关文章

  1. python基础 Day5

    python Day5 字典 其他数据类型的缺点 列表可以存储大量的数据,但是关联性不强. 列表的查询速度比较慢 其容器的数据类型为dict 其数据类型的分类 可变(不可哈希)的数据类型:list d ...

  2. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  3. Python基础学习总结(持续更新)

    https://www.cnblogs.com/jin-xin/articles/7459977.html 嗯,学完一天,白天上班,眼睛要瞎了= = DAY1 1,计算机基础. CPU:相当于人的大脑 ...

  4. python基础-基础知识(包括:函数递归等知识)

    老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, ", [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有 ...

  5. Python基础 小白[7天]入门笔记

    笔记来源 Day-1 基础知识(注释.输入.输出.循环.数据类型.随机数) #-*- codeing = utf-8 -*- #@Time : 2020/7/11 11:38 #@Author : H ...

  6. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  7. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  8. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

  9. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

随机推荐

  1. Apache调优(一)

    (1).Apache和Tomcat的关系 Apache HTTPD Server与Apache Tomcat同属于Apache的开源项目.两个都可以单独作为web server使用,但是又都有各自的特 ...

  2. WebService学习总结(三)——使用JDK开发WebService(转)

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  3. JAVA8中接口的一些新用法(springboot环境)

    @Configuration public interface IAbstractConvertStrategy { CacheService getCacheService(); default b ...

  4. Python - Django - request 对象

    request.method: 获取请求的方法,例如 GET.POST 等 views.py: from django.shortcuts import render, HttpResponse # ...

  5. Nginx限制ip访问

    首先建立下面的配置文件放在nginx的conf目录下面,命名为blocksip.conf: 加入以下代码: #屏蔽soso蜘蛛IP deny 113.108.12.154; #此为搜搜蜘蛛IP den ...

  6. 【JS新手教程】JS获取当前星期几的几种方法

    该文通过获取星期几的几种方法,介绍JS里的数组,判断,和字符串截取,可以当作新手教程看,小白也看的懂.获取星期几,可通过Date()对象的getDay()获取,获取的是一个数字,对应的是0,1,2,3 ...

  7. MySQL报错argument out of range 1055解决办法

    参考:https://www.cnblogs.com/liangbenstudy/p/10246895.html MySQL 5.7.22查询时候报错 argument out of range 报错 ...

  8. Ubuntu 新装服务器部署流程

    1.设定时区 rm -f /etc/localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2.配置apt-get源 sed -i ...

  9. 【OpenGL开发】GLUT/freeglut 是什么? OpenGL 和它们有什么关系?

    GLUT/freeglut 是什么? OpenGL 和它们有什么关系? OpenGL只是一个标准,它的实现一般自带在操作系统里,只要确保显卡驱动足够新就可以使用.如果需要在程序里直接使用OpenGL, ...

  10. redhat与zlib兼容性问题?

    今天在redhat 6.3 x64版本上安装了zlib,安装完后可以正常使用,就是发现gedit使用有点异常——无法启动,当时也没在意,但是后来重启电脑后出现桌面背景图片后就不弹出登陆窗口了,但是进命 ...