Python中字典的应用及相关操作!
小白如何成为python数据分析师
第9天---->字典(dict)
小学我们就学会了翻阅查询新华字典了,我们可以通过目录索引查询我们要找的字,便于理解学习这个字和字的含义。那么在编程语言中我们像字典的数据类型呢?还真有,也称为字典。就像《新华字典》中,每个字都有与它对应的解释一样,每个字和它的解释合在一起就是字典中的一个条目。在字典的字称为键,字的解释称为值。 键(key)和值(value)组成的条目称为键值对。字典={键:值, 键:值, 键:值, …}
当我们需要存储多个信息时,比如一个人的个人信息(姓名,年龄、性别、爱好、联系方法…),我们可以使用之前学过的列表、元组和集合,但是你会发现这些都不是最理想的选择。会有各自的问题。我们将一堆数据放进去,读取数据时,我们就会发现,这是个啥?因为没有声明,导致我们放进去的数据,读出来时,我们就不认识了。集合是最不合适的,因为集合有去重特性,如果一个人的年龄和体重相同,那么集合中就会少一项信息。查询时,我们得知道下标才好查找。不然就得一个一个的遍历查找,效率低下。这时就是字典拯救我们了。
我们可以通过键很好的理解(值)数据含义,可以通过键快速查询到值。
字典(dictionary)类型,这种数据类型最适合把相关联的信息组装到一起,并且可以帮助我们解决程序中为真实事物建模的问题。
相信你已经对字典有了一定了解,下面我们就来更深入的学习字典吧!
创建和使用字典
1.字面量语法
在Python中创建字典可以使用{}
字面量语法,跟列表、集合差不多。值得注意的是字典的{}
中的元素是以键值对的形式存在的,每个元素由:
分隔的两个值构成,:
前面是键,:
后面是值。
kuanglu = {'李淳罡': '天不生我李淳罡,剑道万古如长夜。','萧炎': '三十年河东,三十年河西,莫欺少年穷!','安澜': '仙之巅,傲世间,有我安澜便有天!','王腾': '我儿王腾有大帝之姿!'}
print(kuanglu['王腾'])person = {'name': '王大锤','age': 20,'weight': 60,'office': '科华北路62号','home': '中同仁路8号','tel': '13122334455','contacts': {'qq': 123456,'tel': 12345678910,'a': 45,'9': 58}
}
print(person['name'])
print(person['contacts']['qq'])
print(person['contacts']['a'])
print(person['contacts']['9'])
用字典来保存一个人的信息远远优于使用列表或元组,因为我们可以用:
前面的键来表示条目的含义,而:
后面就是这个条目所对应的值。
2.构造式语法(使用内置函数dict
创建字典)
# dict函数(构造器)中的每一组参数就是字典中的一组键值对
person = dict(name='安澜', age=99999999, weight=9999999, home='帝城')
print(person) # {name='安澜', age=99999999, weight=9999999, home='帝城'}
3.通过Python内置函数zip压缩两个序列并创建字典
a = 'ABCDE'
b = '12345'
items1 = dict(zip(a, b))
# items1 = dict(zip('ABCDE', '12345'))
print(items1) # {'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'}
items2 = dict(zip('ABCDE', range(1, 10)))
print(items2) # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
4.生成式语法创建字典
# 列表的生成式语法
list1 = [i for i in range(1, 10)]
print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 字典的的生成式语法
student2 = {i: i ** 2 for i in range(1, 10)}
print(student2) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
5.循环遍历字典
想知道字典中一共有多少组键值对,仍然是使用len
函数;如果想对字典进行遍历,可以用for
循环,但是需要注意,for
循环只是对字典的键进行了遍历.
student = {'name': '安澜','age': 99999,'weight': 9999999,'office': '完美世界','home': '天渊原始帝城','tel': '唤我真名',}
print(len(student)) # 6# 遍历字典的键
for key in student.keys():print(key, student[key])# print(key)
print('-' * 10)
# 遍历字典的值
for value in student.values():print(value)
print('-' * 10)
# 遍历键值队
for key, value in student.items():print(key, value)
print('-' * 10)
字典的运算
对于字典类型来说,成员运算和索引运算肯定是最为重要的,前者可以判定指定的键在不在字典中,后者可以通过键获取对应的值或者向字典中加入新的键值对。
注意:字典的索引不同于列表的索引,列表中的元素因为有属于自己有序号(下标),所以列表的索引是一个整数;字典中因为保存的是键值对,所以字典的索引是键值对中的键,通过索引操作可以修改原来的值或者向字典中存入新的键值对。
字典也使用了哈希存储的方式,所以字典中的键必须是不可变类型,例如整数(
int
)、浮点数(float
)、字符串(str
)、元组(tuple
)等类型的值;列表(
list
)和集合(set
)是不能作为字典中的键的,当然字典类型本身也不能再作为字典中的键,因为字典也是可变类型,但是字典可以作为字典中的值。
person = {'name': '安澜','age': 99999,'weight': 9999999,'office': '完美世界','home': '天渊原始帝城','tel': '唤我真名'
}
# 检查name和tel两个键在不在person字典中
print('name' in person, 'tel' in person) # True False
# 通过age修将person字典中对应的值修改为250
if 'age' in person:person['age'] = 250
print(person)
# 通过索引操作向person字典中存入新的键值对
person['tel'] = '13122334455'
person['signature'] = '哪怕背负天渊,需一手托原始帝城,我安澜一样无敌世间!'# 检查person字典中键值对的数量
print(len(person)) # 7
# 对字典的键进行循环并通索引运算获取键对应的值
for key in person:print(f'{key}: {person[key]}')
需要注意,在通过索引运算获取字典中的值时,如指定的键没有在字典中,将会引发
KeyError
异常。这时我们可以所以get函数通过key获取value,如果key不存在,返回空值,不会报错。
# 使用get函数通过key获取value时,如果key不存在,返回空值,不会报错。
print(student.get('name'))
print(student.get('bgy'))
字典的方法
# 字典中的值又是一个字典(嵌套的字典)
students = {1001: {'name': '狄仁杰', 'sex': True, 'age': 22, 'place': '山西大同'},1002: {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'},1003: {'name': '武则天', 'sex': False, 'age': 20, 'place': '四川广元'}
}# 使用get方法通过键获取对应的值,如果取不到不会引发KeyError异常而是返回None或设定的默认值
print(students.get(1002)) # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(students.get(1005)) # None
print(students.get(1005, {'name': '无名氏'})) # {'name': '无名氏'}# 获取字典中所有的键
print(students.keys()) # dict_keys([1001, 1002, 1003])
# 获取字典中所有的值
print(students.values()) # dict_values([{...}, {...}, {...}])
# 获取字典中所有的键值对
print(students.items()) # dict_items([(1001, {...}), (1002, {....}), (1003, {...})])
# 对字典中所有的键值对进行循环遍历
for key, value in students.items():print(key, '--->', value)# 使用pop方法通过键删除对应的键值对并返回该值
stu1 = students.pop(1002)
print(stu1) # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(len(students)) # 2
# stu2 = students.pop(1005) # KeyError: 1005
stu2 = students.pop(1005, {})
print(stu2) # {}# 使用popitem方法删除字典中最后一组键值对并返回对应的二元组
# 如果字典中没有元素,调用该方法将引发KeyError异常
key, value = students.popitem()
print(key, value) # 1003 {'name': '武则天', 'sex': False, 'age': 20, 'place': '四川广元'}# setdefault可以更新字典中的键对应的值或向字典中存入新的键值对
# setdefault方法的第一个参数是键,第二个参数是键对应的值
# 如果这个键在字典中存在,更新这个键之后会返回原来与这个键对应的值
# 如果这个键在字典中不存在,方法将返回第二个参数的值,默认为None
result = students.setdefault(1005, {'name': '方启鹤', 'sex': True})
print(result) # {'name': '方启鹤', 'sex': True}
print(students) # {1001: {...}, 1005: {...}}# 使用update更新字典元素,相同的键会用新值覆盖掉旧值,不同的键会添加到字典中
others = {1005: {'name': '乔峰', 'sex': True, 'age': 32, 'place': '北京大兴'},1010: {'name': '王语嫣', 'sex': False, 'age': 19},1008: {'name': '钟灵', 'sex': False}
}
students.update(others)
print(students) # {1001: {...}, 1005: {...}, 1010: {...}, 1008: {...}}
跟列表一样,从字典中删除元素也可以使用
del
关键字,在删除元素的时候如果指定的键索引不到对应的值,一样会引发KeyError
异常,具体的做法如下所示。
dict1 = {'a': 100, 'b': 200, 'c': 300}
dict2 = {'d': 400, 'e': 500, 'f': 600, 'a': 250}# 更新(合并)
dict1.update(dict2)
print(dict1)# 删除---->键必须存在,不存在会产生keyerror
# del dict1['b']
# print(dict1)
print(dict1.pop('b'))# 删除末尾的键
dict2.popitem()
字典的应用
案例:
1.输入一段话,统计每个英文字母出现的次数。
# 1.输入一段话,统计每个英文字母出现的次数。
# 方法1import string
# 使用生成式生成字典:{所以小写英文字母:0}
results = {letter: 0 for letter in string.ascii_lowercase}
# print(results)
content = input('请输入: ').lower() # .lower() 将输入的字符串中的英文转换为英文小写。
# 遍历循环输入的元素
for ch in content:# 如果有元素在字典results中if ch in results:#值加1results[ch] += 1
# print(results)
# 循环获取字典results的键和值
for key, value in results.items():print(f'{key}: {value:>2d}次')# 方法2.
sentence = input('请输入一段话: ')
counter = {}
for ch in sentence:if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':counter[ch] = counter.get(ch, 0) + 1
for key, value in counter.items():print(f'字母{key}出现了{value}次.')
2.输入一段话,统计每个英文单词出现的次数。
# 2.输入一段话,统计每个英文单词出现的次数。content = input('请输入: ').replace(',', ' ') # 将输入字符串中的“,”转换成空格。便于以后拆分
content_now = content.split(' ') # 通过空格拆分
results = {letter: 0 for letter in content_now} # 建立字典
for word in content_now:if word in results:results[word] += 1
print(results)
for key, value in results.items():print(f'{key}:{value}次')
3.在一个字典中保存了股票的代码和价格,找出股价大于100元的股票并创建一个新的字典。
dict1 = {}
stocks = {'AAPL': 191.88,'GOOG': 1186.96,'IBM': 149.24,'ORCL': 48.44,'ACN': 166.89,'FB': 208.09,'SYMC': 21.29
}# 方法1.
for key, value in stocks.items():if value > 100:dict1[key] = value
print(dict1)
# 字典的生成式语法创建
dict2 = {key: value for key, value in stocks.items() if value > 100}
print(dict2)# 找出最大股价,最小股价的股票名称,
# 使用max函数,注意函数max,和min默认是比较键的大小。所以我们要指定比较方式”kry=“
# 方法1.找最大,最小
print(max(stocks, key=stocks.get)) # 找最大,按指定的值
print(min(stocks, key=stocks.get))# 方法2.# 可以通过Python内置函数zip压缩两个序列并创建字典,利用这个函数,我们将键和值相互换位,
dict4 = dict(zip(stocks.values(), stocks.keys()))
print(dict4)# 最大值和最小值的键。
# 键和值相互换位,比较是键(股价),输出值(股票名)[1]
print(max(zip(stocks.values(), stocks.keys()))[1])
print(min(zip(stocks.values(), stocks.keys()))[1])
# 分解动作
_, max_values = max(zip(stocks.values(), stocks.keys()))
print(max_values)# 股价从大到小排序
# 字典排序,sorted()
print(sorted(stocks, key=stocks.get, reverse=True))
Python中字典的应用及相关操作!相关推荐
- Python中字典的介绍以及常用操作
1.字典的介绍 字典是另一种可变类型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示 ...
- python英语字典程序修改_详解如何修改python中字典的键和值
我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...
- python中字典使用_python中字典的使用
python中的字典的特性: 在字典中的元素是散列存放的,没有顺序, 在进行增删改查的时候使用字典中需要的关键字(key)即可. 一: 创建字典 1)直接定义一个: dict = {'ob1':'co ...
- python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- python字典修改键所对应值_详解如何修改python中字典的键和值
我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- Python中字典对象实现原理
python中字典对象实现原理 注:字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1) 字典是Python的一种可变 ...
- python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...
[多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...
- 【Python】Python实战从入门到精通之四 -- 教你使用Python中字典
本文是Python实战–从入门到精通系列的第四篇文章: Python实战从入门到精通第一讲–Python中的变量和数据类型 Python实战从入门到精通第二讲–Python中列表操作详解 Python ...
最新文章
- 保护云端数据的5个技巧
- 第十五届全国大学生智能汽车竞赛-室外光电ROS组预赛方案
- docker 常用命令(1)
- Java日历compareTo()方法与示例
- CVPR 2019 Oral | 京东目标检测算法ScratchDet的深入思考
- 运算器(串行加法器和并行加法器,ALU)
- OllyDbg 与 x64Dbg 与 Windbg 与 IDA 区别是什么?
- IPv4和IPv6比特转发率和包转发率的关系
- oom killer lmkd killer
- batchnomal_Linux Kernel 排程機制介紹 ? Loda's blog
- 逆元 阶乘逆元 数论 HDU 5651 xiaoxin juju needs help
- 标准声纹采集终端,为声纹库建设提供标准支撑,为声纹鉴定和比对提供坚实的基础!
- Java 版植物大战僵尸思路和源码分享!
- 一文看懂计算机视觉!7个专业术语别说你不知道!
- 或是独体字吗_独体字结构 独体结构的字有哪些字?
- 常见的 @Transactional 注解,你确定用对了吗?
- 全自动过滤器:全自动过滤器工作原理
- 如何利用小程序+插件快速开发app?
- 火山小视频伪原创怎么做
- 网络渗透作业之 wireshark抓包校园网