数据按类型可划分为:

不可变数据类型(可哈希):元祖、string、int、bool  

可变数据类型(不可哈希):dict、list

集合本身是可变数据类型,元素是不可变数据类型

字典中的key必须是不可变数据类型,value可以是任意数据类型

字典的优点:二分查找查询、存储大量关系型数据

dict创建格式:

dic1 = dict(key1 = 20,
key2 = 30)
print(dic1) #{'key1': 20, 'key2': 30}
dic2 = dict({'key1':20,
'key2':30,
'key3':450})
print(dic2) #{'key1': 20, 'key2': 30, 'key3': 450}
dic3 = dict((('key1',100),
('key2',200),
('key3',302)))
print(dic3) #{'key1': 100, 'key2': 200, 'key3': 302}
dic4 = dict([('key1',100),
('key2',200),
('key3',302)])
print(dic4) #{'key1': 100, 'key2': 200, 'key3': 302}
dic5 = {'key1':100,
'key2':200}
print(dic5) #{'key1': 100, 'key2': 200}

创建一个字典:

dic = {
'name' : 'Jogn',
'age' : 18,
'height' : 170,
}

增:

<1>通过键值对直接赋值

dic['name'] = 'JognsMoke'            #{'name': 'JognsMoke', 'age': 18, 'height': 170}
dic['weight'] = 75 #{'name': 'JognsMoke', 'age': 18, 'height': 170, 'weight': 75}

<2>dict.setdefault()

有返回值,默认值为None,若该键存在则返回原值,若不存在则返回设置的默认值

dic.setdefault('height',177)    #{'name': 'Jogn', 'age': 18, 'height': 170}
dic.setdefault('sex','male') #{'name': 'Jogn', 'age': 18, 'height': 170, 'sex': 'male'}
print(dic.setdefault('height',177))     #
print(dic.setdefault('sex','male')) #male

删:

<1>dict.pop()

删除字典指定的键值对,返回键所对应的值,键值必须要给出,否则返回默认值

print(dic.pop('name'))  #Jogn
print(dic.pop('name',None)) #None
print(dic.pop('name','该值已被弹出')) #该值已被弹出

<2>dict.popitem()

3.5(包括3.5)之前随机删除一个键值对,3.5之后删除最后的一对键值对 返回值为(key,value) 如果字典为空则返回 'popitem(): dictionary is empty'

print(dic.popitem())    #('height', 170) python 3.7

<3>dict.clear()

清空字典

dic.clear()
print(dic) #{}

<4>del

删除键值对也可以删除整个字典,键名存在则删除该键值对,弱不存在则报错

del dic['name'] #{'age': 18, 'height': 170}
print(dic) del dic['sex'] #KeyError: 'sex' del dic
print(dic) #name 'dic' is not defined

改:

<1>通过键值对直接改

<2>dict.update()

把字典二的键值对更新到字典一中,无返回值

dic2 = {
'name' : 'Jane',
'sex' :'female'
}
dic.update(dic2)
print(dic) #{'name': 'Jane', 'age': 18, 'height': 170, 'sex': 'female'}
dic.update(sex = 'female',hobby = 'sing')   #{'name': 'Jogn', 'age': 18, 'height': 170, 'sex': 'female', 'hobby': 'sing'}
print(dic)
dic.update([('sex','female'),('hobby','play')]) #{'name': 'Jogn', 'age': 18, 'height': 170, 'sex': 'female', 'hobby': 'play'}
print(dic)

查:

<1>通过键直接查询

没有此键则会报错

print(dic['name'])  #Jogn

<2>dict.get()

v1 = dic.get('name')    #Jogn
print(v1)
v2 = dic.get('hobby') #None
print(v2)
v3 = dic.get('hobby','并未找到') #并未找到
print(v3)

<3>for循环

print("打印字典键:")
for i in dic:
print(i)
'''打印字典键:
name
age
height''' print("打印字典键:")
for i in dic.keys():
print(i)
'''打印字典键:
name
age
height''' print("打印字典值:")
for i in dic.values():
print(i)
'''打印字典值:
Jogn
18
170''' print("打印去掉括号的字典键值对:")
for i,j in dic.items():
print(i,j)
'''打印去掉括号的字典键值对:
name Jogn
age 18
height 170'''

Python学习日记(三) 学习使用dict的更多相关文章

  1. Python学习日记(三十六) Mysql数据库篇 四

    MySQL作业分析 五张表的增删改查: 完成所有表的关系创建 创建教师表(tid为这张表教师ID,tname为这张表教师的姓名) create table teacherTable( tid int ...

  2. Python学习日记(三十八) Mysql数据库篇 六

    Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询. 创建视图: CREATE VIEW passtvie ...

  3. Python学习日记(三十四) Mysql数据库篇 二

    外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...

  4. Python学习日记(三十三) Mysql数据库篇 一

    背景 Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品.Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relat ...

  5. Python学习日记(三十九) Mysql数据库篇 七

    Mysql函数 高级函数 1.BIN(N) 返回N的二进制编码 ); 执行结果: 2.BINARY(str) 将字符串str转换为二进制字符串 select BINARY('ASCII'); 执行结果 ...

  6. Python学习日记(三十七) Mysql数据库篇 五

    pymsql的使用 初识pymysql模块 先在数据库中创建一个用户信息表,里面包含用户的ID.用户名.密码 create table userinfo( uid int not null auto_ ...

  7. Python学习日记(三十五) Mysql数据库篇 三

    使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...

  8. Python学习日记(三十二) hmac检验客户端的合法性和socketsever模块

    Hmac模块 其实这个模块类似hashlib模块,它能将一些重要的信息通过算法加密成密文,让信息更具有安全性. 关于hmac加密算法的了解:它的全名是哈希运算消息认证码(Hash-based Mess ...

  9. Python学习日记(三十一) 黏包问题

    import subprocess res = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.P ...

随机推荐

  1. word 转 pdf,c#代码

    通过使用 C# 控制 office 软件 com 组件转 pdf 1 word 转 pdf 方案二:可以使用 netoffice 进行转换 参考文档:https://netoffice.io/docu ...

  2. vue中使用极验验证码(附demo)

    前言: vue中使用极验验证码,最好是在页面渲染的时候(mounted)进行验证码的初始化,然后在初始化回调中绑定触发弹出验证码的事件.这样在点击按钮或者进行特定操作时能够快速的弹出验证码. 关键代码 ...

  3. win 10 系统安装后的配置

    win10图片恢复默认照片查看器 1. 搜索栏”放大文本大小“ 调整字体大小 2. 桌面显示 我的电脑: 3. 关闭不必要的动画,ctrl+r,输入:control ,打开控制面板

  4. springboot 整合OSS

    OSS 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.OSS可用于图片.音视频.日志等海量文件的存储.各种终端 ...

  5. Centos7安装图形界面桌面

    查看是否存在图形安装包.如果包含GNOME Desktop,则说明已存在. yum grouplist 安装图形化包 yum groupinstall "GNOME Desktop" ...

  6. 【网络开发】详谈socket请求Web服务器过程

    最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有"连接建立"的发生 ...

  7. Dotmemory 内存分析工具

    Dotmemory 内存分析工具 教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑 ...

  8. (转)面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题

    背景:redis问题在面试过程中经常被问到,对于常见问题一定不能放过. 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题 一.缓存雪崩 1.1什么是缓存雪崩? 如果缓存数据设置的过 ...

  9. Centos7修改profile错误的解救方案

    在改profile的时候,改出问题了,除了cd以外的命令基本都不能用了.使用root用户执行: # export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11 ...

  10. 【Linux】多线程同步的四种方式

    背景问题:在特定的应用场景下,多线程不进行同步会造成什么问题? 通过多线程模拟多窗口售票为例: #include <iostream> #include<pthread.h> ...