Python基础知识之2——字典
字典是什么?
字典是另外一个可变的数据结构,且可存储任意类型对象,比如字符串、数字、列表等。字典是由关键字和值两部分组成,也就是 key 和 value,中间用冒号分隔。这种结构类似于新华字典,字典中每一个字都有一个对应的解释,具体的用法是这样的:
字典名 = {关键字1:值,关键字2:值,关键字3:值}
注:
1)键是唯一的,创建第二个同名键的时候,第二个同名键会覆盖第一个同名键,即不允许出现两个相同的键;
2)键是不可变的,不能用列表当键。
eg:
# 构建一个字典,记录各个教师的收入
name_money = {'王老师':30000,'侯老师':28000,'李老师':33000,'张老师':25000}
print(name_money)
print('字典的数据类型表示是:',type(name_money))
结果是:
{'王老师': 30000, '侯老师': 28000, '李老师': 33000, '张老师': 25000}
字典的数据类型表示是: <class 'dict'>
字典的基本操作:
常见的字典操作是访问字典、遍历字典等,实际项目中经常被使用到,比如 excel 文件读入内存以后,按照字典的方法存放,然后对其增删值。
访问字典:
访问字典也就是获取关键字对应的值,方法是指定字典名和放在方括号内的关键字,获取后的值可以赋值给变量。
eg:
Teacher_Li = name_money['李老师']
print(f'李老师的月薪是:{Teacher_Li}元/月')
结果是:
李老师的月薪是:33000元/月
添加、修改、删除键值对:
字典是一种可变的数据结构,可以随时添加或者删除其中的键值对。方法是,指定字典名、用方括号括起的键和相关的值。
eg:
print(f'原来老师们的月薪情况是:{name_money}')
# 新来了熊老师和陈老师,他们的月薪如下:
name_money['熊老师'] = 15000
name_money['陈老师'] = 50000
print(f'新来老师后,老师们的月薪情况是:{name_money}')
# 熊老师因为研究突破,所以工资涨了5000块,变成了20000
name_money['熊老师'] = 15000 + 5000
print(f'熊老师加薪后,老师们的月薪情况是:{name_money}')
# 李老师因为个人原因,离开了学校
del name_money['李老师']
print(f'李老师走后,老师们的月薪情况是:{name_money}')
结果是:
原来老师们的月薪情况是:{'王老师': 30000, '侯老师': 28000, '李老师': 33000, '张老师': 25000}
新来老师后,老师们的月薪情况是:{'王老师': 30000, '侯老师': 28000, '李老师': 33000, '张老师': 25000, '熊老师': 15000, '陈老师': 50000}
熊老师加薪后,老师们的月薪情况是:{'王老师': 30000, '侯老师': 28000, '李老师': 33000, '张老师': 25000, '熊老师': 20000, '陈老师': 50000}
李老师走后,老师们的月薪情况是:{'王老师': 30000, '侯老师': 28000, '张老师': 25000, '熊老师': 20000, '陈老师': 50000}
创建空字典:
在实际项目中,我们可能不知道字典中存放的内容是什么。这时,我们可以采用从空的字典开始动态创建,也就是在程序运行的时候添加具体的内容。
常见的使用场景是:第一个:需要用户输入数据存储为字典;第二个是自动生成大量的键值对,比如爬虫,爬取豆瓣电影的排名信息。我们可以把排名放入空的字典中,然后每次爬取一个电影, 添加一个对应的键值对。
# 从空的字典开始创建
student_info = {} # 定义空的字典
student_info['姓名'] = '胡晓明'
student_info['学号'] = 201811131123
student_info['专业'] = '信息与科学技术'
student_info['班级'] = '一班'
print('从空的列表中构建字典:',student_info)
结果是:
从空的列表中构建字典: {'姓名': '胡晓明', '学号': 201811131123, '专业': '信息与科学技术', '班级': '一班'}
字典的内置函数
# 内置函数
# 内置函数cmp()的替代方法
import operator as op
op.lt('王老师','刘老师') # 相当与'王老师'<'张老师'
op.le('王老师','张老师') # 相当于'王老师'<='张老师'
op.eq('王老师','张老师') # 相当于'王老师'=='张老师'
op.ne('王老师','张老师') # 相当于'王老师'!='张老师'
op.gt('王老师','张老师') # 相当于'王老师'>'张老师'
op.ge('王老师','张老师') # 相当于 '王老师'>='张老师'
# 计算字典元素个数,即键的总数。
len(name_money)
# 输出字典可打印的字符串表示。
str(name_money) # 内置方法
name_money1 = name_money.copy() # 复制字典
name_money1.clear() # 删除字典
name_money1['刘老师'] = 32000
name_money.fromkeys([1,3,4],'谁') # 创建一个新字典,其中前一个参数序列为键,后一个参数为值,适用于批量产生多个同值得键
name_money.get('王老师',None) # 获取对应键的值,如果没有该键,则返回参数2
name_money.setdefault('张老师', None) #获取对应键的值,如果没有该键,则在原字典里添加上该键值对,值为参数2
'熊老师' in name_money # 判断键是否在字典中
name_money.items() # 元组形式存储字典
name_money.keys() # 返回所有的键
name_money.values() # 返回所有的值
name_money.update(name_money1) # 合并两个字典的键值对
字典与列表结合:
把一系列字典存储在列表中,或将列表作为值放在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。这在项目中经常用到。
什么时候用列表什么时候用字典呢?
当你存取的数据类型一样时,使用列表,当你存取的数据类型不一样时就用字典。
注:数据类型不一样不是指整形或者字符型。
举个例子:如果你需要存很多人的姓名,仅仅这一个属性,就用列表来进行处理,当你要存取不仅仅是人名,包括年龄,性别,国籍等等这些信息时,这时候用字典是最合适的。
字典列表
# 合并两个字典,每个字典存为一个元素
la = [name_money1,name_money]
在字典中存储列表
# 在字典中存放列表
family = {'小米':['小米8','小米note'],'华为':['华为P20','荣耀9'],'苹果':['iphone8','iphoneX']}
print(family) # 上述代码的运行结果是:
# {'小米': ['小米8', '小米note'], '华为': ['华为P20', '荣耀9'], '苹果': ['iphone8', 'iphoneX']}
在字典中存储字典
# 在字典中存储字典
phone = {'小米':{'小米8':3000,'小米note':5000},'华为':{'华为P20':3300,'荣耀9':2055},'苹果':{'iphone8':8000,'iphoneX':12000}}
print(phone)
# 找出虾米
print(phone['小米']['小米8']) # 以上代码输出的结果是:
# {'小米': {'小米8': 3000, '小米note': 5000}, '华为': {'华为P20': 3300, '荣耀9': 2055}, '苹果': {'iphone8': 8000, 'iphoneX': 12000}}
#
小小的项目练习
# 《扶摇》演员表的小练习
# 创建一个字典存放演员信息
Fuyao_Actor_Profile = {'杨幂':{'角色':'扶摇','配音演员':'王潇倩'},'阮经天':{'角色':'长孙无极','配音演员':'马正阳'},'刘奕君':{'角色':'齐震','配音演员':'刘奕君'},'高伟光':{'角色':'战北野','配音演员':'赵成晨'},'王劲松':{'角色':'长孙迥','配音演员':'王劲松'},'黄宥明':{'角色':'燕惊尘','配音演员':'文森'},'高瀚宇':{'角色':'江枫','配音演员':'袁聪宇'},'顾又铭':{'角色':'战北恒','配音演员':'林强'},'秦焰':{'角色':'周叔','配音演员':'宣晓鸣'},'蒋龙':{'角色':'小七','配音演员':'苏尚卿'}}
# 打印出杨幂扮演的角色
print(f'杨幂扮演的角色是:{Fuyao_Actor_Profile["杨幂"]["角色"]}')
# 创建一个备份字典,备份演员信息表
Copy_Fuyao = Fuyao_Actor_Profile.copy() # 删去阮经天的演员表
del Fuyao_Actor_Profile['阮经天']
print(f'删去阮经天后的演员表为:{Fuyao_Actor_Profile}')
# 更换为演员陈晓
Fuyao_Actor_Profile['陈晓'] = {'角色':'长孙无极','配音演员':'马正阳'}
print(f'阮经天换为陈晓后的演员表为:{Fuyao_Actor_Profile}') # 新增加角色
Fuyao_Actor_Profile['张雅钦'] = {'角色':'雅兰珠','配音演员':'吟良犬'}
Fuyao_Actor_Profile['王鹤润'] = {'角色':'凤净梵','配音演员':'蔡娜'}
Fuyao_Actor_Profile['周俐葳'] = {'角色':'时岚','配音演员':'张晗'}
Fuyao_Actor_Profile['魏晖倪'] = {'角色':'简雪','配音演员':'曹一茜'} # 打印出阮经天所在的演员表里的演员名
print(f'阮经天所在的演员表里的演员名:{Copy_Fuyao.keys()}')
# 打印出阮经天所在的演员表里的角色名,并统计一共有多少个演员
print('阮经天所在的演员表里的角色名:')
for i in Copy_Fuyao.keys():
print(f'{Copy_Fuyao[i]["角色"]}')
print(f'一共有{len(Copy_Fuyao)}个角色')
# 扶摇的详细细节
Fuyao_Actor_Profile.fromkeys(['杨幂'],{'名字':'扶摇','喜欢的男角色':['长孙无极','战北野','小七'],'去过的国家':['太渊','天权','天煞','璇玑']})
Python基础知识之2——字典的更多相关文章
- python基础知识梳理----5dict 字典的应用
内容简介: 1:字典简介 2:字典的增删该查 3:字典嵌套 1: 字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根 ...
- Python基础知识(五)------字典
Python基础知识(四)------字典 字典 一丶什么是字典 dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 键: 必须是可哈希,(不可变的数据类型 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- python基础知识小结-运维笔记
接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...
- Python基础知识(五)
# -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...
- python基础一数据类型之字典
摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...
- Python 基础知识(一)
1.Python简介 1.1.Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时 ...
随机推荐
- NOIp2018集训test-9-6(am)
Problem A. divisor 发现x为k可表达一定可以表示成这种形式,如k=3,x=(1/3+1/2+1/6)x. 于是可以搜索k(k<=7)个1/i加起来等于1的情况,如果一个数是这些 ...
- linux centos 安装配置rsync
先安装rsync yum install rsync 创建文件,并配置权限 touch /etc/rsyncd.conf touch /etc/rsyncd.secrets /etc/rsyncd.s ...
- [C#]记录一次异常排查,关于using语法、sqlserver数据库session、DBHelper类
最近在做一个基于asp.net和sqlserver的网站项目,发现网站运行一段时间之后,会报异常: 超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小 ...
- 2018-2019-2-20175323 java实验三敏捷开发与XP实践
代码规范 安装alibaba插件 首先使用code栏里面的reformat code使代码的格式更加规范 再用编码规约扫描,alibaba把问题分为block/critical/major三个等级,出 ...
- pycharm 参数、快捷键、调试模式
PyCharm参数.快捷键.调试模式 PyCharm设置参数 在运行Python脚本时,会经常遇到需要传入额外的参数来运行脚本. 例如下脚本1: #!/usr/bin/env python2 # *. ...
- sql中desc的妙用
很多情况下对表内部结构不熟悉,想看下我创建的表里面又多少表明,又想他按照首字母的规律排列, 这时候就要用desc +表名了. desc t_bike_info; hive> desc t_bik ...
- NetBeans简介和简单使用
1.什么是NetBeans? NetBeans IDE:可以使开发人员利用Java平台能够快速创建Web.企业.桌面以及移动的应用程序: 支持语言:PHP.Ruby.JavaScript.Groovy ...
- 新建的maven项目里没有src
百度上搜到一个网友的一句话:没筷子你就不吃饭了是吧 若有所思 自己新建一个src文件 然后, 由于已经转换,因此上图没有sources选项 然后就可以在文件中随意编写文件 如果想添加package,直 ...
- 漏洞验证系列--MongoDB未授权访问
本系列文章旨在对于有一定网络安全基础的人员,在日常工作中扫描出来的各种漏洞,如何进行验证,以区分该漏洞是否存在或是扫描器误报.请勿应用非法途径. 本漏洞是由于MongoDB未设置访问权限,用户可以直接 ...
- 20140329 自由 youtube
1.人生入戏,全靠演技:人生苦短,必须性感 2.youtube修改用户名 3.使用代理软件修改了IE的代理导致上不了网