参考视频
字典的定义
"""
字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法
my_dict = {key:value,key:value……}
定义空字典
my_dict = {}
my_dict = dict()
"""
# 定义字典
my_dict1 = {'王力宏': 99, '周杰伦': 88, '林俊杰': 77}
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f'字典1的内容是:{my_dict1},类型:{type(my_dict1)}')
print(f'字典2的内容是:{my_dict2},类型:{type(my_dict2)}')
print(f'字典3的内容是:{my_dict3},类型:{type(my_dict3)}')
"""
字典1的内容是:{'王力宏': 99, '周杰伦': 88, '林俊杰': 77},类型:<class 'dict'>
字典2的内容是:{},类型:<class 'dict'>
字典3的内容是:{},类型:<class 'dict'>
"""
# 定义重复Key的字典,新的把老的覆盖掉,不允许重复
# my_dict1 = {'王力宏': 99, '王力宏': 88,'周杰伦': 88, '林俊杰': 77}
# print(f'重复Key的字典内容是:{my_dict1}')
"""
重复Key的字典内容是:{'王力宏': 88, '周杰伦': 88, '林俊杰': 77}
"""
# 字典和集合一样,不可以使用下标索引
# 但字典可以通过Key值取得对应的Value
my_dict1 = {'王力宏': 99, '周杰伦': 88, '林俊杰': 77}
score = my_dict1['王力宏']
print(f'王力宏的考试分数是:{score}')
# 字典的嵌套,字典的Key和Value可以是任意数据类型(Key不可为字典)
stu_score_dict = {
'王力宏': {
'语文': 77,
'数学': 66,
'英语': 33
}, '周杰伦': {
'语文': 88,
'数学': 86,
'英语': 55
}, '林俊杰': {
'语文': 99,
'数学': 96,
'英语': 66
}
}
print(f'学生的考试信息是:{stu_score_dict}')
# 从嵌套字典中获取信息
score = stu_score_dict['周杰伦']['语文']
print(f'周杰伦的语文分数是:{score}')
score = stu_score_dict['林俊杰']['英语']
print(f'林俊杰的英语分数是:{score}')
"""
以下来自菜鸟教程
"""
my_dict = dict()
my_dict['one'] = "1 - 菜鸟教程"
my_dict[2] = "2 - 菜鸟工具"
tiny_dict = {'name': 'noob', 'code': 1, 'site': 'www.noob.com'}
print(my_dict['one']) # 输出键为 'one' 的值
print(my_dict[2]) # 输出键为 2 的值
print(tiny_dict) # 输出完整的字典
print(tiny_dict.keys()) # 输出所有键
print(tiny_dict.values()) # 输出所有值
"""
1 - 菜鸟教程
2 - 菜鸟工具
{'name': 'noob', 'code': 1, 'site': 'www.noob.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['noob', 1, 'www.noob.com'])
"""
# “字典创建可以作为字典文字进行重写”是指在 Python 中,
# 您可以使用字典文字(dictionary literals)来创建字典,
# 这意味着您可以直接在代码中编写字典的内容,而不必显式地调用构造函数 dict()。
#
# 在给定的示例中,my_dict = {} 就是使用字典文字进行字典创建的示例。
# 这行代码创建了一个空字典,并将其赋值给名为 my_dict 的变量。
# 这种用法与 my_dict = dict() 效果是相同的,但是更简洁。
# {x: x**2 for x in (2, 4, 6)} 该代码使用的是字典推导式,更多推导式内容可以参考:Python 推导式。
result = {x: x**2 for x in (2, 4, 6)}
print(result)
"""
{2: 4, 4: 16, 6: 36}
"""
# 字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
# 两个重要的点需要记住:
# 1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
tiny_dict = {'Name': 'noob', 'Age': 7, 'Name': '小菜鸟'}
print("tiny_dict['Name']: ", tiny_dict['Name']) # tiny_dict['Name']: 小菜鸟
# 2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:
tiny_dict = {['Name']: 'noob', 'Age': 7}
print("tiny_dict['Name']: ", tiny_dict['Name']) # TypeError: unhashable type: 'list'
字典的常用操作
# my_dict = {'王力宏': 99, '周杰伦': 88, '林俊杰': 77}
# # 新增元素
# my_dict['张信哲'] = 66
# print(f'字典新增元素后结果:{my_dict}')
# """
# 字典新增元素后结果:{'王力宏': 99, '周杰伦': 88, '林俊杰': 77, '张信哲': 66}
# """
# # 更新元素,取决于Key存不存在
# my_dict['周杰伦'] = 33
# print(f'字典更新后结果:{my_dict}')
# """
# 字典更新后结果:{'王力宏': 99, '周杰伦': 33, '林俊杰': 77, '张信哲': 66}
# """
#
# # 删除元素,语法:字典pop(Key),结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除
# score = my_dict.pop('周杰伦')
# print(f'字典中被移除了一个元素,结果是{my_dict},周杰伦的考试分数是:{score}')
# """
# 字典中被移除了一个元素,结果是{'王力宏': 99, '林俊杰': 77, '张信哲': 66},周杰伦的考试分数是:33
# """
#
# # 清空元素
# my_dict.clear()
# print(f'字典被清空了,内容是:{my_dict}')
# """
# 字典被清空了,内容是:{}
# """
#
# # 获取全部的Key,语法:字典.Keys(),结果:得到字典中的全部Key
# my_dict = {'王力宏': 99, '周杰伦': 88, '林俊杰': 77}
# keys = my_dict.keys()
# print(f'字典的全部keys是:{keys}')
# """
# 字典的全部keys是:dict_keys(['王力宏', '周杰伦', '林俊杰'])
# """
#
# # 遍历字典
# # 方式一:通过获取到全部的key来完成遍历
# for key in keys:
# print(f'字典的key是:{key}')
# print(f'字典的value是:{my_dict[key]}')
# """
# 字典的key是:王力宏
# 字典的value是:99
# 字典的key是:周杰伦
# 字典的value是:88
# 字典的key是:林俊杰
# 字典的value是:77
# """
# # 方式二:直接对字典进行for循环,每一次循环都是直接得到key
# for key in my_dict:
# print(f'2字典的key是:{key}')
# print(f'2字典的value是:{my_dict[key]}')
# """
# 2字典的key是:王力宏
# 2字典的value是:99
# 2字典的key是:周杰伦
# 2字典的value是:88
# 2字典的key是:林俊杰
# 2字典的value是:77
# """
# # 字典和集合一样,不可以使用下标索引,不能用while循环
#
# # 统计字典内的元素数量
# num = len(my_dict)
# print(f'字典中的元素数量有:{num}个')
#
# """
# 以下内容来自菜鸟教程
# """
# # Python字典包含了以下内置函数:
# # len(dict) 计算字典元素个数,即键的总数。
# num = len(my_dict)
# print(f'字典中的元素数量有:{num}个')
# # str(dict) 输出字典,可以打印的字符串表示。
# tiny_dict = {'Name': 'noob', 'Age': 7, 'Class': 'First'}
# print(str(tiny_dict)) # {'Name': 'noob', 'Age': 7, 'Class': 'First'}
# # type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。
# tiny_dict = {'Name': 'noob', 'Age': 7, 'Class': 'First'}
# print(type(tiny_dict)) # <class 'dict'>
"""
以下来自python-100-Days-master
"""
# 从字典中取最大值
my_dict = {'王力宏': 99, '周杰伦': 88, '林俊杰': 77}
# 取出最大值
print(max(my_dict.values())) # 99
# 取值最大值的键
print(max(my_dict, key=my_dict.get)) # 王力宏
# 取出最大值的键和值
# items()会返回一个包含元组的列表[('王力宏', 99), ('周杰伦', 88), ('林俊杰', 77)]
# key参数接受一个函数,这个函数用来计算每个元素在比较时所用的值。在这个例子中,我们使用了一个lambda匿名函数:lambda x: x[1]。
# lambda x: x[1]定义了一个接受一个参数x的匿名函数,它返回x的第二个元素(因为元组索引是从0开始的,所以x[1]就是每个键值对中的值部分)
print(max(my_dict.items(), key=lambda x: x[1])) # ('王力宏', 99)
# 以上key并不是字典中的key,而是参数
def get_value_from_tuple(tuple_item): # [('王力宏', 99), ('周杰伦', 88), ('林俊杰', 77)]
return tuple_item[1]
max_score = max(my_dict.items(), key=get_value_from_tuple)
print(max_score) # ('王力宏', 99)
字典的常用操作案例
message_dict = {
'王力宏': {
'部门': '科技部',
'工资': 3000,
'级别': 1
}, '周杰伦': {
'部门': '市场部',
'工资': 5000,
'级别': 2
}, '林俊杰': {
'部门': '市场部',
'工资': 7000,
'级别': 3
}, '张学友': {
'部门': '科技部',
'工资': 4000,
'级别': 1
}, '刘德华': {
'部门': '市场部',
'工资': 6000,
'级别': 2
}
}
print(f'全体员工当前信息如下:{message_dict}')
for name in message_dict:
# if条件判断符合条件员工
if message_dict[name]['级别'] == 1:
# 升职加薪操作
# 获取到员工的信息字典
employee_message_dict = message_dict[name]
# 修改员工的信息
employee_message_dict['级别'] = 2
employee_message_dict['工资'] += 1000
# 将员工的信息更新回message_dict
message_dict[name] = employee_message_dict
print(f'对员工进行升职加薪后的结果:{message_dict}')
# 使用max()函数和字典推导式找出工资最大值
max_salary = max(employee['工资'] for employee in message_dict.values())
print("工资最大值为:", max_salary)
"""
全体员工当前信息如下:{'王力宏': {'部门': '科技部', '工资': 3000, '级别': 1}, '周杰伦': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊杰': {'部门': '市场部', '工资': 7000, '级别': 3}, '张学友': {'部门': '科技部', '工资': 4000, '级别': 1}, '刘德华': {'部门': '市场部', '工资': 6000, '级别': 2}}
对员工进行升职加薪后的结果:{'王力宏': {'部门': '科技部', '工资': 4000, '级别': 2}, '周杰伦': {'部门': '市场部', '工资': 5000, '级别': 2}, '林俊杰': {'部门': '市场部', '工资': 7000, '级别': 3}, '张学友': {'部门': '科技部', '工资': 5000, '级别': 2}, '刘德华': {'部门': '市场部', '工资': 6000, '级别': 2}}
工资最大值为: 7000
"""
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com