一、字典

字典是python的基础数据类型之一:字典可以存储大量的数据,关系型数据。
同样他也是python中唯一的映射类的数据类型。
数据类型的分类:
可变的(不可哈希)数据类型:list,dict
不可变的(可哈希的)数据类型:str,int,bool,tuple
dic = {"name":"jin","age":18,"sex":"male"}
键值对的形式存在的,键: 值
字典的键必须是不可变的数据类型。(工作中:都是由数字,或者str组成)
字典的值是任意数据类型。
dict = {键:值} ---> dict = {不可变的数据类型:任意的数据类型}
优点:
字典可以存储大量的数据,关系型数据。
查询速度快。
python3.5之前包括3.5版本,字典是无序的。
python3.6开始,是有序的。(字典的键等于列表的索引)

字典的创建方式
1.直接创建
dic = {'a': 1} .dict方法
dic1 = dict({'a':1,'b':2}) # 括号里面直接写字典
dic2 = dict(c=3, d=4) # 直接写key=value
dic3 = dict([('e',5),('f',6)]) # 括号里面写列表,列表每一个元素是二元组,每个元组是字典的键和值
print(dic1) # {'a': 1, 'b': 2}
print(dic2) # {'c': 3, 'd': 4}
print(dic2) # {'e': 5, 'f': 6}

字典为什么寻址快
因为:
  字典的键是不可变的数据类型,所以是可哈希的,
  字典在存入内存的时候会将你的所有的key先进行哈希,再将哈希值存入内存中,
  这样在查询的时候可以根据哈希值直接就可以找到,所以查询速度很快!

二、字典的增删改查以及其他操作

dic = {'name': '小晶', 'age': 23, 'sex': '女', 'job': 'NoIt'}

增:
1、直接改,有此key就改,无此key就添加
dic['age'] = 24 # 改
dic['home'] = '惠州' # 添加 2、setdefault
有此key则不做任何操作但是给我返回对应的值,无此key则添加
dic.setdefault('sex', '男') # dic有 sex 这个键,那么不做修改,但会返回 sex 的值
print(dic.setdefault('sex', '男')) # 女 dic.setdefault('hobby', '吃') # dic 无hobby这个键,那么新增这个键值对
print(dic) 删:
1、pop:通过键去删除键值对,也有返回值,
如果没有此键,也没有设置参数,则报错,
如果没有此键,但是设置了第二个参数,则不会报错,并且返回第二个参数。
print(dic.pop('name')) # 小晶
print(dic) # 'age': 23, 'sex': '女', 'job': 'NoIt'
"""注意:字典的pop和列表的pop有点区别,列表可以直接 list.pop(),默认删除最后一个,但字典必须要有key,即:dict.pop(key),无key会报错"""
print(dic.pop('name1')) # 没有此键,没有设置参数,报错
print(dic.pop('name1', None)) # 没有此键,有设置参数,返回参数:None
print(dic.pop('name1', '没有此键')) # 没有此键,有设置参数,返回参数:没有此键 2、popitem
python3.5之前随机删除某个键值对,3.6以后,删除最后一组键值对。有返回值.
print(dic.popitem()) # ('job': 'NoIt')
print(dic) # 'name': '小晶', 'age': 23, 'sex': '女' 3、clear: 清空
dic.clear()
print(dic) 4、del
按照键删除键值对
del dic['name'] 删除整个字典
del dic
print(dic) 改:
1、通过键来改
dic['age'] = 25
print(dic) 2、update
dic = {"name": "jin", "age": 18, "sex": "male"}
dic2 = {"name": "yin", "weight": 75}
dic.update(dic2) # 将dic2中的所有键值对覆盖并添加到dic中
print(dic) # {'name': 'yin', 'age': 18, 'sex': 'male', 'weight': 75}
print(dic2) # {'name': 'yin', 'weight': 75} # 也可以直接在update括号内自定义添加,与写两个字典结合一样原理
dic.update(a='', b='', name='xiaobai')
print(dic) # {'name': 'xiaobai', 'age': 18, 'sex': 'male', 'a': '666', 'b': '222'} 查:
dic = {"name": "jin", "age": 18, "sex": "male"}
通过键直接查询,没有此键则报错
print(dic['name']) # jin
print(dic['name1']) # 报错 通过get()方法查询,没有此键则默认返回None, 也可以自定义参数
print(dic.get('name')) # jin
print(dic.get('name1')) # None
print(dic.get('name1', '没有此键')) # 没有此键 其他方法:
1、dic.keys():输出键,可以转化成list,可以遍历
print(dic.keys(), type(dic.keys())) # 类似于列表:dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>
l1 = list(dic.keys()) # 转化成list
print(l1) # ['name', 'age', 'sex'] for key in dic.keys(): # 遍历
print(key) # name age sex 2、dic.values():输出值,可转化成list,可遍历。
print(dic.values()) # 类似于列表:dict_values(['jin', 18, 'male'])
print(list(dic.values())) # 转化成list, ['jin', 18, 'male'] for key in dic.values(): # 遍历
print(key) 3、dic.items(): 输出键值对,可转化成list,可遍历。
print(dic.items()) # 类似于列表:dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')])
print(list(dic.items())) # 转化成列表:[('name', 'jin'), ('age', 18), ('sex', 'male')] 4、for循环输出字典:
for i in dic.items():
print(i) 结果:以元组形式输出
('name', 'jin')
('age', 18)
('sex', 'male') for k, v in dic.items():
print(k, v) 结果:本身是什么类型输出就是什么类型
name jin
age 18
sex male # 注意:
for i in dic:
print(i)
相当于
for i in dic.keys():
print(i) 5、长度:
print(len(dic)) 6、分别赋值:
a, b = 10, 20
print(a, b) # a = 10 , b = 20 int型 a, b = [10, 20]
print(a, b) # a = 10 , b = 20 int型 a, b = ['', '']
print(a, b) # a = 10 , b = 20 str型 a, b = [(1, 2), (3, 4)]
print(a, b) # a = (1, 2), b = (3, 4) tuple型 7、互换值
a = 10
b = 20
a, b = b, a
print(a, b) # a = 20 , b = 10

三、字典的嵌套

dic = {'name_list': ['狗子', 'xiaoming', '张大力', 'xiaobai'],
1: {'name': 'xiaobai', 'age': 18, 'sex': '男'},
(1, 2): [100, {'ip': '192.168.1.1', 'port': 3306}]
}
1, 给name_list对应的列表追加一个值: 曹操.
dic['name_list'].append('曹操')
print(dic) dic.get('name_list').append('曹操')
print(dic) 2, 将name_list对应的xiaoming变成全部大写.
dic['name_list'][1] = dic['name_list'][1].upper()
print(dic) 3, 将1对应的字典添加一个键值对: weight: 75
dic[1]['weight'] = 75
print(dic) dic.get(1).setdefault('weight', 75)
print(dic) 4, 将1对应的字典的name键对应的名字xiaobai换成xiaohei
dic[1]['name'] = 'xiaohei'
print(dic) 5, 将{'ip': '192.168.1.1', 'port': 3306}此字典的port键值对删除.
dic[(1, 2)][1].pop('port')
print(dic)

python基础5 字典的更多相关文章

  1. python基础之字典dict和集合set

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...

  2. Python基础数据类型-字典(dict)

    Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...

  3. python基础之字典、集合

    一.字典(dictionary) 作用:存多个值,key-value存取,取值速度快 定义:key必须是不可变类型,value可以是任意类型 字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分 ...

  4. Python基础知识---字典

    现在在实习期间,好久没用Python了,今天在做Java项目时用的HashMap让我联想到了Python中的字典,就写一些Python字典的知识吧,复习复习. 字典:  key --> valu ...

  5. python基础_字典_列表_元组考试_day4

    1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=['alex','eric','rain'] li=['alex','eric','rain'] v="_".jo ...

  6. Python基础__字典、集合、运算符

    之前讨论的字符串.列表.元组都是有序对象,本节则重点讨论无序对象:字典与集合.一.字典 列表是Python中的有序集合,列表中的序指的是列表中的元素与自然数集形成了一个一一对应的关系.例如L=['I' ...

  7. python基础类型—字典

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

  8. Python 全栈开发二 python基础 字符串 字典 集合

    一.字符串 1,在python中,字符串是最为常见的数据类型,一般情况下用引号来创建字符串. >>ch = "wallace" >>ch1 = 'walla ...

  9. python基础之字典以及增删改查

    字典:字典是python中唯一的一个映射类型,主要形式为 dic = {key1:value,key2:value2,....} 字典中key的值是唯一的,主要关系到HASH算法,并且key的值必须是 ...

随机推荐

  1. 跨域iframe如何实现高度自适应?

    经常有项目会要求实现iframe高度自适应,如果是同域的还好说,如果是跨域的,父页面没有办法操作子页面,想要正确获取子页面高度的话,可以采用以下办法: 方法一:使用HTML5 postMessage ...

  2. 2019年1月份A项目面试纪要

    2019年1月份A项目面试纪要 本周二(1月22号),笔者接到了A项目的电话面试.这个面试来自A项目的客户,客户的后勤模块的几个顾问组成阵容强大的面试官团队.参加这个面试,让笔者感触良多,自己虽然在S ...

  3. OPC协议解析-关于OPC协议的几个问题

    1    什么是OPC协议? 为了便于自动化行业不同厂家的设备和应用程序能相互交换数据,定义了一个统一的接口函数,就是OPC协议规范.有了OPC就可以使用统一的方式去访问不同设备厂商的产品数据. OP ...

  4. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  5. Windows系统下搭建Git本地代码库

    近由于工作需要,要把工作代码做一下版本管理.工作代码也不方便放到github上,也不想付费建私密库,公司也没几个人,所以就想着搭建一个本地Git版本库,来做版本管理.搭建过程如下. 系统环境:Dell ...

  6. C/C++ -- 插入排序算法

    索引: 目录索引 参看代码 GitHub: Sort.cpp 代码简要分析说明: 1.for(int i=1;i<nSize;i++) 这个外层的for循环, [0][1],[1][2],[2] ...

  7. SQL 使用临时表和临时变量完成update表字段---实际案例

    -- 使用临时表 -- 创建临时表 --ALTER TABLE TS_ExpenseApplication_Reim_Detail ADD BgCode NVARCHAR() NULL, BgItem ...

  8. netcat的简单使用(一)

    简单写一下netcat这个强悍的工具,主要是怕自己忘了 功能大致这些个,有遗漏的欢迎私信补充 1.侦听模式/传输模式 2.telnet/获取banner信息 3.传输文本信息 4.传输文件/目录 5. ...

  9. 雨后清风教你如何在Windows 7中对硬盘进行分区

    磁盘分区是将硬盘驱动器分成多个逻辑单元.人们通常不会选择对硬盘进行分区,但它有很多好处.主要是,通过对磁盘进行分区,您可以将操作系统与数据分开,从而减少数据损坏的可能性. 磁盘分区方法 打开“计算机管 ...

  10. SAP Change Request Management (ChaRM)基础教程

    本文介绍了SAP Solution Manager中的变更请求管理工具(Change Request Management,以下简称ChaRM ). 最近打算写个上线前请求号检查工具,为此需要了解相关 ...