一、字典的简介  

  字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

  字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

二、增加字典元素的方法

▷list['key'] = vaule

这种方法是通过字典的kye给字典添加元素,如果字典里已存在该key的值,则会覆盖,如果不存在,则会添加,如下如:

1 dic = {'name':'fuyong','age':29,'job':'none'}
2
3 dic['addr'] = 'henan'
4 print(dic)
5 #输出结果为:{'age': 29, 'addr': 'henan', 'name': 'fuyong', 'job': 'none'} 6 dic['addr'] = 'xinyang'
7 print(dic)
8 #输出结果为:{'age': 29, 'addr': 'xinyang', 'name': 'fuyong', 'job': 'none'}

▷setdefault()方法:

此方法是根据函数对字典进行增添元素,参数为(‘key’,‘value’) value默认为none

与直接用 dict[key] = value 的添加元素方法不同,用setdefault(key,value)方法的时候,如果字典没有该key的时候,则会正常添加,如果以及有了该key,那么将不进行操作(不会覆盖原来的值)

 dic = {'name':'fuyong','age':29,'job':'none'}
dic.setdefault('name','lixiang')
print(dic) #结果不会改变: {'age': 29, 'name': 'fuyong', 'job': 'none'} dic.setdefault('height')
print(dic) #结果:{'age': 29, 'name': 'fuyong', 'height': None, 'job': 'none'} dic.setdefault('addr','henan')
print(dic) #结果 {'addr': 'henan', 'age': 29, 'name': 'fuyong', 'height': None, 'job': 'none'}

三、删除字典元素的方法

▷pop(key)方法:

与列表的pop()方法不同,字典的pop()方法必须得给它传一个key值,如果字典里没有该key,则会报错。

也可以用 pop(key,'返回值') 来指定返回值,此时,当找不到key的时候,则不会报错,会将指定的返回值返回

 dic = {'name':'fuyong','age':29,'job':'none'}
dic.pop('job')
print(dic) #结果为:{'age': 29, 'name': 'fuyong'} dic.pop('job')
print(dic) #此时以及没有job的key,就会报错 KeyError: 'job'
print(dic.pop('addr','henan'))  #此时虽然找不到‘addr’key,但是不会报错,并且将‘henan’返回 
print(dic)             #此时字典没有被改变 :{'name': 'fuyong', 'age': 29}
 

▷popitem()方法:

此方法类似于列表的pop()方法,用来随机删除一个元素,返回删除的那个元素的(健,值),如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
print(dic.popitem()) #结果为('name', 'fuyong')
print(dic) #结果为:{'job': 'none', 'age': 29}

▷del list[key]

此方法用来删除字典种指定key以及它所对应的value,如果找不到该key,则会报错,如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
del dic['job']
print(dic) #结果为:{'age': 29, 'name': 'fuyong'} del dic['job']
print(dic) #此时字典里已经没有job值,则会报错:KeyError: 'job'

▷clear()方法:

该方法与列表的clear()方法类似,用来清空字典,如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
dic.clear()
print(dic) #结果为:{}

▷del dic

该方法用来删除整个字典,如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
del dic
print(dic) #此时dic已经被删除,不存在了,所以会报错:NameError: name 'dic' is not defined

四、修改字典元素的方法

▷list['key'] = vaule

这种方法是通过字典的kye来修改对应的value值,如果字典里已存在该key的值,则会修改,如果不存在,则会重新添加

  dic = {'name':'fuyong','age':29,'job':'none'}

 dic['addr'] = 'henan'  #此时没有addr的key  则会添加
print(dic)
#输出结果为:{'age': 29, 'addr': 'henan', 'name': 'fuyong', 'job': 'none'} dic['addr'] = 'xinyang' #此时以及有addr的key 则会修改
print(dic)
#输出结果为:{'age': 29, 'addr': 'xinyang', 'name': 'fuyong', 'job': 'none'}

▷update({key:value})方法:

该方法是用来追加、拓展原字典元素。

参数必须为一个字典,如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
dic.update({'addr':'henan'})
print(dic) #结果为:{'job': 'none', 'addr': 'henan', 'age': 29, 'name': 'fuyong'}

如果传入的字典里有部分key与原字典相同,则该key所对应的值会被覆盖,其他没有的key则会被添加,如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
dic.update({'addr':'henan','name':'lixiang'})
print(dic)
#结果为:{'addr': 'henan', 'name': 'lixiang', 'job': 'none', 'age': 29}

五、查询字典元素的方法

▷dic[key]

可以通过key来索引查询字典的元素,如果查不到,则会报错

 dic = {'name':'fuyong','age':29,'job':'none'}
print(dic['name']) #结果为:fuyong
print(dic['addr']) #搜索不到,会报错。KeyError: 'addr'

▷get(key)方法:

该方法是用指定索引的方法来查找其所对应的元素,如果找不到,不会报错,可以通过 dic.get(key,'返回值') 方法指定找不到key时候的返回值,如下:

 dic = {'name':'fuyong','age':29,'job':'none'}
print(dic.get('name')) #结果为:fuyong
print(dic.get('addr')) #结果为:none
print(dic.get('addr','找不到该数据')) #结果为:找不到该数据

6、用循环的方法来遍历字典:

▷keys()方法

此方法用来查询字典所有的key,可以用for循环进行遍历

 dic = {'name':'fuyong','age':29,'job':'none'}
print(dic.keys())
# 结果:dict_keys(['name', 'age', 'job']) for key in dic.keys():
print(key)
# 结果为:
# job
# name
# age

▷values()方法

此方法用来查询字典所有的values,可以用for循环进行遍历

 dic = {'name':'fuyong','age':29,'job':'none'}
print(dic.values())
# 结果:dict_values(['none', 29, 'fuyong']) for value in dic.values():
print(value)
# 结果为:
# none
#
# fuyong

▷items()方法

此方法用来查询字典所有 的键值,可以用for循环来遍历

 dic = {'name':'fuyong','age':29,'job':'none'}
print(dic.items())
# 结果:dict_items([('job', 'none'), ('name', 'fuyong'), ('age', 29)]) for k,v in dic.items():
print(k,v)
# 结果为:
# job none
# name fuyong
# age 29

Python笔记·第六章——字典 (dict) 的增删改查及其他方法的更多相关文章

  1. Python笔记·第六章——集合 (set) 的增删改查及 copy()方法

    简介: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 1.去重,把一个列表变成集合,就自动去重了. ...

  2. 字典 (dict) 的增删改查及其他方法

    一.字典 1.字典简介: 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无 ...

  3. Python笔记·第五章—— 列表(List) 的增删改查及其他方法

    一.列表的简介   列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...

  4. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  5. 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建   VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...

  6. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  7. Django学习笔记--数据库中的单表操作----增删改查

    1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...

  8. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

  9. 【EF6学习笔记】(二)操练 CRUD 增删改查

    本篇原文链接: Implementing Basic CRUD Functionality 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根 ...

随机推荐

  1. html的块级元素和内联元素

    常用的块级元素: address , center , div , dl ,, form , h1 , h2 , h3 , h4 , h5 , h6 , menu , ol , p , table , ...

  2. C 程序实现密码隐秘输入 linux系统可执行

    读写用户输入,屏幕不回显 char *getpass( const char *prompt); getpass用于从键盘读取用户输入,但屏幕不回显. 参数prompt为屏幕提示字符. 函数返回值为用 ...

  3. KVM管理平台openebula安装

    1.1opennebula控制台的安装 (如果要添加映像需要给200G以上给/var/lib/one,本文是共享/var/lib/one实现监控,用映像出创建虚拟机原理是从opennebula控制平台 ...

  4. IT屌丝如何获取改变自己的真正内心动力

    要想从现在的低薪(年薪10万以下)快读变成未来的高新(年薪30万以上)我们要做的就只有从自身改变开始! 人改变自己的勇气,朱啊哟取决于我们自己当前的痛苦程度!直到某一天真的回避不了了,才会被动的改变, ...

  5. 二叉搜索树 (BST) 的创建以及遍历

    二叉搜索树(Binary Search Tree) : 属于二叉树,其中每个节点都含有一个可以比较的键(如需要可以在键上关联值), 且每个节点的键都大于其左子树中的任意节点而小于右子树的任意节点的键. ...

  6. Android 中图片压缩分析(上)

    作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情 ...

  7. 【OpenCV】一种基于阈值的图片中的文字分割

    在今年泰迪杯A题电商中图片的文字识别这道题中,我们先用了一种很笨的办法来分割字符. 首先对图片进行灰度化,然后二值化,这里的二值化要选择一个合适的阈值.然后我们进行轮廓的提取,计算轮廓最小矩形的面积, ...

  8. 对比MFC和Winform及WPF

    MFC 生成本机代码,自然是很快.可是,消息循环,减缓了界面显示速度.winform 封装了 win32 的api,多次进行P/invoke 操作 (大部分使用p/invoke操作封装),速度慢 .w ...

  9. ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行

    上一章节中对路由的注册和匹配过程进行了介绍,知道了MVC的Http请求最终是交由MvcHandler处理的,而其处理过程就是对Controller的创建.执行和释放. 本章将从以下几点进一步对上面提到 ...

  10. [转载] Java集合---HashMap源码剖析

    转载自http://www.cnblogs.com/ITtangtang/p/3948406.html 一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射 ...