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} >& ...
随机推荐
- 怎样优雅的实现INotifyPropertyChanged
第一 安装nuget包 PropertyChanged.Fody. 第二 在类的上方加上 [PropertyChanged.AddINotifyPropertyChangedInterface] 类似 ...
- Boost 信号与槽,获取槽函数返回值,使用占位参数传递信号携带的参数
test1: 展示了, 1 信号与槽的基本使用, 2 要获取槽函数的返回值时的注意事项 #if 1 /* 参考blog https://www.cnblogs.com/jiayayao/p/62 ...
- Arduino 串行外设接口(SPI)
时间有限有其他项目工作在忙,感觉作者写的不错,就先记录下来了. 这几天用SPI--Arduino 在供应商的电子原件上游离游走,重要的是可以读写了, 下面是在查资料看到的一篇不错的文章关于用Ardui ...
- matlab中num2str 将数字转换为字符数组
参考:https://ww2.mathworks.cn/help/matlab/ref/num2str.html?searchHighlight=num2str&s_tid=doc_srcht ...
- appium 环境安装指引
1.安装Appium-Python-Client Pip install Appium-Python-Client 2.安装nodejs https://nodejs.org/ 安装成功验证:node ...
- 多测师讲解requests __中_高级讲师肖sir
(1)生成报告 import unittest #导入单元测试框架 import requests #导入接口库 import time # #时间戳,导入time模块 from api.HTMLTe ...
- main函数标准写法
main函数签名 C++中允许两种格式,带参数的和不带参数的: int main() int main(int argc, const char* argv[]) 和C标准不同,C++中main函数必 ...
- scp远程上传
scp -P 22 /Users/mac/Downloads/VBoxGuestAdditions_5.2.12.iso root@192.168.1.210:/usr/local/src s ...
- [转] Swoft HTTP 服务
转载自Go语言中文网, https://studygolang.com/articles/20667 传统架构 PHP-FPM + Nginx 传统架构中所使用的Nginx + PHP-FPM的模型中 ...
- MySQL的事务与锁 转
资料来源: 青山老师的mysql课程 丁奇老师的<MySQL45讲> 一.文章结构和思路 1.整体文章结构 2.大概思路 介绍数据库的特性: 数据库标准所制定的隔离级别和解决对应的一致性问 ...