|NO.Z.00017|——————————|BigDataEnd|——|Hadoop&Python.v17|——|Arithmetic.v17|语法:数据结构&字典dict.V4|
一、字典 dict
### --- 类似这种销售信息的数据结构,我们使用元组或者列表存储是可以的。
top_sales = [('Peter', 213), ('John', 253), ('Tony', 284), ('Henry', 205), ('Mike', 280)]
### --- 可以很方便的取出在这个榜单中第一名、第二名或者任意一名的销售数据。但它有一个缺点,如果我们想取出特定的某个销售人员的数据时,它会很麻烦。比如如果想要找出Mike的数据,只能去循环遍历,一个个的去比对。
for sale, amount in top_sales:
if sale == 'Mike':
print(sale, amount)
~~~ # 这样不光写起来麻烦,执行效率也很低,假设这是一个庞大的销售数据库,那要花多少时间寻找呢?所以必须使用字典。
一、字典的定义
### --- 使用花括号,可以直接定义字典
sales = {
'Peter': 213,
'John': 253,
'Tony': 284,
'Henry': 205,
'Mike': 280
}
~~~ # 每一行冒号左边的是键(key),右边的是值(value),称作键值对,以逗号分隔开。在这里我们故意写成每行一个键值对,实际并不要求每行一个,只要用逗号分隔开来就可以。键是不能重复的,值可以重复。
~~~ # 对于top_sales 这种两个一组、一一对应的列表来说,可以直接转换为字典。
sales = dict(top_sales)
# sales现在的值变成了
{
'Peter': 213,
'John': 253,
'Tony': 284,
'Henry': 205,
'Mike': 280
}
二、增删改查
~~~ # 有了字典,那现在就可以快速的取出任意一个人的数据了
sales['Mike']
sales['Henry']
~~~ # 注意,键的名称是区分大小写的,'Mike' 和 'mike'分别对应了不同的键。
sales['mike']
# KeyError: 'mike'
~~~ # 这行代码将会报错,因为不存在'mike'这个键。在访问之前,需要先往字典中添加数据相应的键:
# 值可以先设置为None或者0
sales['mike'] = 0
~~~ # 修改字典中的数据:
sales['mike'] = 300
~~~ # 删除字典中的数据
del sales['mike']
三、遍历字典
~~~ # 字典的遍历和列表、元组、字符串有所区别,由于它的每一项都是一个键值对,所以在遍历时也要注意。
for key_value in sales.items():
print(key_value)
~~~ # 注意sales.items() 这种写法,在遍历字典时,这是一种通用的写法。items函数将字典内的内容转换成了一种可迭代的序列,以供for循环遍历,遍历出来的每一项是一个元组,包含了键和值。所以通常我们直接写成这样:
for key, value in sales.items():
print(key, value)
~~~ # 注意中间的逗号和最后的打印结果。
~~~ # 如果不使用items函数,那遍历的就是字典所有的key。
for key in sales:
print(key)
四、字典函数字典有一些函数和列表是一样的,比如clear, copy,这两个不再介绍,我们来看看其他的函数。
### --- get
~~~ # 如果直接访问字典中一个不存在的key,就会产生报错,所以,通常我们如果不确定是否存在某个key时,会先判断一下:
if 'mike' in sales:
print(sales['mike'])
else:
print('mike', 0)
~~~ # in关键字又一次派上用场了, 在这里用in来检查字典中是否包含"mike"这个键,如果包含则返回True,无论"mike"所对应的值是否为空。这样的写法,很麻烦,每次都要先判断,再查询,这时候get函数就派上用场了。
sales.get('mike', 0)
~~~ # 这一行短短的代码就实现了上面4行代码的功能,它表示在字典中查询'mike'键所对应的值,如果不存在'mike'键,则返回0。这里的0可以替换成任何其他的默认值,这样就极大简化代码逻辑。
### --- keys/values
~~~ # 如果只想单独列出所有的销售人员名单,可以这样写:
sales.keys()
~~~ # 可以对它进行遍历
for sale in sales.keys():
print(sale)
~~~ # 如果只想计算出所有销售人员的销售额总和,也就是公司总销售额,可以直接取出value部分并求和:
sum(sales.values())
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv027-python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了