python数据类型之dict(字典)
dict字典
关注公众号“轻松学编程”了解更多。
1.概述
dict也是一种存储方式,类似于list和tuple,但是,字典采用键—值(key—value)的形式存储。
优点:具有极快的查找速度。
2.key的特性
1.字典中的key必须唯一
2**.key必须是不可变对象**
例如:字符串、整数等都是不可变的,可以作为key
list是可变的,不能作为key
应用场景举例:保存学生成绩
可以采用字典,将学生的学号或者名字作为key,成绩为value进行存储,方便查找。
3.字典的创建
语法:
字典名 = {键1:值1,键2:值2,…}
dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1)
print(dict(a=1,b=2,c=3))
输出:
{'tom': 90, 'lili': 78, 'lele': 92}
{'a': 1, 'b': 2, 'c': 3}
3.1列表中的元组转字典:
list1= [('a',1),('b',2)]
print({a:b for a,b in list1})
>>>{'a': 1, 'b': 2}
4.字典操作
4.1访问元素
语法:元素 = 字典名[key]
dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1['tom'])
输出:
90
注意:在key不存在的情况下,会报错。
语法: 元素 = 字典名.get(key)
功能:使用get的方法获取值,若key存在,则返回value的值,若key不存在则返回None
dist1 = {'tom':90,'lili':78, 'lele':92}
value = dist1.get('tom')
print(value)
输出:
90
4.2 添加元素
语法:字典名[key] = value
dist1 = {'tom':90,'lili':78, 'lele':92}
dist1['lisi'] = 89
print(dist1)
输出:
{'tom': 90, 'lili': 78, 'lele': 92, 'lisi': 89}
注意:一个key只能对应一个value,多次对一个key的value赋值,后面的值会把前面的值覆盖掉。
4.3 删除元素
语法:字典名.pop(key)
dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1.pop('tom'))
print(dist1)
输出:
90
{'lili': 78, 'lele': 92}
5.字典的遍历
字典在内存中存储是无序的,因此无法通过下标来获取值。
5.1 使用for循环遍历
语法:
获取键
for key in dict:
print(key)
获取值
for value in dict.values() :
print(value)
同时获取键和值
for k, v in dist.items() :
print(k, v)
dict1 = {'tom':90,'lili':78, 'lele':92}
#获取字典的key
for key in dict1:
print(key)
#获取字典中的value
for value in dict1.values():
print(value)
#同时获取字典中的key与value
for k, v in dict1.items():
print(k, v)
输出:
tom
lili
lele
90
78
92
tom 90
lili 78
lele 92
# 通过函数来遍历字典
dict1 = {'tom':90,'lili':78, 'lele':92}
for i,v in enumerate(dict1):
print(i,v,dict1[v])
输出:
0 tom 90
1 lili 78
2 lele 92
5.2 字典对调
d ={'d': 4, 'a': 1, 'b': 2, 'c': 3}
d = {v: k for k, v in d.items()}
print(d)
输出:
{4: 'd', 1: 'a', 2: 'b', 3: 'c'}
6.与list的区别
1.dist的查找和插入的速度极快,不会随着key-value的增加而变慢,但是list在查找的时候需要从头向后挨个遍历元素,并且当数据量增大的时候,速度也会随着变慢
2.dist需要占用大量的内存,内存浪费多,而list只相当于存储了字典的key或者value部分,并且数据是紧密排列的。
字典排序
字典在内存中发布是无序的,当想对键值或者键名进行排序时可以先把字典转成元组,这可以达到排序的目的。
score = {'小明': {'avg_score': 90, 'English': 90, 'Math': 90, 'Chniese': 90, },
'小红': {'avg_score': 60, 'English': 60, 'Math': 61, 'Chniese': 59, },
'小黑': {'avg_score': 70, 'English': 75, 'Math': 65, 'Chniese': 70, },
'小白': {'avg_score': 80, 'English': 95, 'Math': 65, 'Chniese': 80, },
}
# 对姓名进行排序,即对键名进行排序
b = sorted(score.items(), key=lambda x: x[0], reverse=True)
show_str = ''
for info in b:
# print(info)
key, value = info[0], info[1]
show_str += '姓名:{},平均分:{},成绩:{}'.format(key,value['avg_score'], value) + '\r\n'
print('对姓名进行排序')
print(show_str)
# 对平均分进行排序
b = sorted(score.items(), key=lambda x: x[1]['avg_score'], reverse=True)
show_str = ''
for info in b:
# print(info)
key, value = info[0], info[1]
show_str += '姓名:{},平均分:{},成绩:{}'.format(key,value['avg_score'], value) + '\r\n'
print('对平均分进行排序')
print(show_str)
# 对英语成绩进行排序
b = sorted(score.items(), key=lambda x: x[1]['English'], reverse=True)
show_str = ''
for info in b:
# print(info)
key, value = info[0], info[1]
show_str += '姓名:{},平均分:{},成绩:{}'.format(key,value['avg_score'], value) + '\r\n'
print('对英语成绩进行排序')
print(show_str)
输出:
对姓名进行排序
姓名:小黑,平均分:70,成绩:{'avg_score': 70, 'English': 75, 'Math': 65, 'Chniese': 70}
姓名:小红,平均分:60,成绩:{'avg_score': 60, 'English': 60, 'Math': 61, 'Chniese': 59}
姓名:小白,平均分:80,成绩:{'avg_score': 80, 'English': 95, 'Math': 65, 'Chniese': 80}
姓名:小明,平均分:90,成绩:{'avg_score': 90, 'English': 90, 'Math': 90, 'Chniese': 90}
对平均分进行排序
姓名:小明,平均分:90,成绩:{'avg_score': 90, 'English': 90, 'Math': 90, 'Chniese': 90}
姓名:小白,平均分:80,成绩:{'avg_score': 80, 'English': 95, 'Math': 65, 'Chniese': 80}
姓名:小黑,平均分:70,成绩:{'avg_score': 70, 'English': 75, 'Math': 65, 'Chniese': 70}
姓名:小红,平均分:60,成绩:{'avg_score': 60, 'English': 60, 'Math': 61, 'Chniese': 59}
对英语成绩进行排序
姓名:小白,平均分:80,成绩:{'avg_score': 80, 'English': 95, 'Math': 65, 'Chniese': 80}
姓名:小明,平均分:90,成绩:{'avg_score': 90, 'English': 90, 'Math': 90, 'Chniese': 90}
姓名:小黑,平均分:70,成绩:{'avg_score': 70, 'English': 75, 'Math': 65, 'Chniese': 70}
姓名:小红,平均分:60,成绩:{'avg_score': 60, 'English': 60, 'Math': 61, 'Chniese': 59}
7、有序字典
import collections
d1 = collections.OrderedDict() # 创建一个有序字典
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d1['d'] = 'D'
for k, v in d1.items():
print(k, v)
8、字典json序列化与反序列
import json
a = {'hello world': '你好,世界'}
# dumps是序列化
c = json.dumps(a)
# loads是反序列化
print(json.loads(c))
输出:
{"hello world": "\u4f60\u597d\uff0c\u4e16\u754c"}
这是由于python3返回默认的是unicode编码,如果想显示中文可以增加一个参数ensure_ascii=False:
import json
a = {'hello world': '你好,世界'}
c = json.dumps(a, ensure_ascii=False)
#
print(json.loads(c))
输出:
{'hello world': '你好,世界'}
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号


关注我,我们一起成长~~
python数据类型之dict(字典)的更多相关文章
- python数据类型:dict(字典)
一.字典的简单介绍 字典(dict)是python中唯一的一个映射类型.他是以{}括起来的键值对组成. 语法: {key1:value1,key2:value2......} 注意:key必须是不可变 ...
- Python数据类型详解——字典
Python数据类型详解--字典 引子 已经学习了列表,现在有个需求--把公司每个员工的姓名.年龄.职务.工资存到列表里,你怎么存? staff_list = [ ["Kwan", ...
- Python基础数据类型(五) dict字典
字典dict{} 字典数字自动排序 enumerate 枚举 for i,k in enumerate(dic,1) #第二个参数默认不写就是0 ---枚举 print(i,k) dict,以{}来表 ...
- Python数据类型之dict和set
Python内置了字典:dict的支持.在其他语言中也成为map,使用键-值(key-value)存储,具有极快的查找速度. 把数据放入dict的方法,除了初始化时指定外,还可以通过key放入. 由于 ...
- python开发基础(二)运算符以及数据类型之dict(字典)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python基础(六)dict字典和文件操作open
字典dict 使用key来标注value的数据类型,key和value是一一对应的.在字典中key是唯一的,所以字典也是无序的. #定义一个字典 dict = { 'name' : 'sylar', ...
- python数据类型三(字典)
一.字典的介绍 字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存 ...
- python数据类型之dict
1.clear:删除所有元素 #D.clear() -> None. Remove all items from D dic_a ={:::'gen'} dic_a.clear() print( ...
- python数据类型之 dict(map)
字典 一.创建字典 方法①: >>> dict1 = {} >>> dict2 = {'name': 'earth', 'port': 80} >& ...
随机推荐
- windows 10 启动修复无法自动修复此计算机
1. 失败后有两个选项卡:关机和高级选项,选择高级选项 2. 然后选择疑难解答 3. 选择高级选项 4. 选择回退到以前的版本 接下来需要登录,选择恢复到上一次正常启动的状态,注意选择保留数据,会有提 ...
- Salesforce Javascript(二) 箭头函数
本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions 我们在 ...
- HTML & CSS & JavaScript 从一个表格到一个灰阶颜色表 01
工具1:HBuilder X 1.9.9.20190522 工具2:火狐浏览器 67.0.4 (64 位) 在开始之前,你需要了解一些基本的知识,不要求你能掌握,但是了解一下还是有益的: HTML 简 ...
- 跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)
前言 来啦,老弟?来啦,上一篇就当唠唠嗑,接下来就开始进行实操撸命令,计划是先整体单纯说说Redis的各种用法和应用,最后再结合代码归纳总结. Redis默认有16个数据库(编号为0~15),默认使用 ...
- Linux init 详解(0,1,2,3,4,5,6)
一.什么是 init init是Linux系统操作中不可缺少的程序之一. 所谓的init进程,它是一个由内核启动的用户级进程. 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数 ...
- 在SpringBoot项目中怎样引入.yml文件中的设置
SpringBoot中获取application.yml文件内容 原始方式pro.load()与 pro.getProperty()配合的方式 @Value注解方式 @ConfigurationPro ...
- k8s集群添加新得node节点
服务端操作: 方法一: 获取master的join token kubeadm token create --print-join-command 重新加入节点 kubeadm join 192.16 ...
- LCA树上倍增求法
1.LCA LCA就是最近公共祖先(Least common ancestor),x,y的LCA记为z=LCA(x,y),满足z是x,y的公共祖先中深度最大的那一个(即离他们最近的那一个)qwq 2. ...
- 分布式事务说的的2PC、3PC、TCC是啥
目录 2PC(Two Phase Commit) 3PC(Three Phase Commit) TCC(Try-Confirm-Cancel) 2PC(Two Phase Commit) 顾名思义, ...
- PHP实现Bitmap的探索 - GMP扩展使用
原文地址:https://blog.fanscore.cn/p/22/ 一.背景 公司当前有一个用户群的系统,核心功能是根据不同的条件组去不同的业务线中get符合条件的uid列表,然后存到redis中 ...