python的自学之路——第六节:字典

前言:这个博客是为了记录我的学习过程也是为了能够有一种动力学习python,欢迎大家监督更新此博客。
                                     (更新:2023年2月22日)

  •  本博客所书写的文字类似于自述性的文字,官方话语较少,也有可能是自言自语的话,不过也比较真实记录学习过程。

第六节:字典

一、概念

  在Python中,字典是一系列 键值对 。每个键都与一个值相关联,你可使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。现实中,可将任何Python对象用作字典中的值,在Python中,字典用放在花括号 {‘键’:值} 中的一系列键值对表示

  • 键值对 是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用 冒号 分隔,而键值对之间用 逗号分隔。在字典中,想存储多少个键值对都可以。

二、简单的使用字典

1.一个简单的字典

简单的创建一个含两个键值对的字典,打印出来(字典可以包含不限量键值)

# 创建一个简单的字典
ID = {'小白': '1999.13.46', '小红': '1888.14.42'}
print(ID) # 完全打印字典
print(ID['小白']) # 输出对应键的值
  • 在上述的代码中可以发现,不同的打印方式会有不同的显示结果
# 代码结果
{'小白': '1999.13.46', '小红': '1888.14.42'}
1999.13.46

2.字典的联合输出

字典的文本联合输出跟字符串或者列表的输出方式基本一致,只需要保持字典的格式即可

ID = {'小白': '1999.13.46', '小红': '1888.14.42'}

print(f"小白,出生于{ID['小白']},年纪符合可以入伍")
print(f"你好小红,出生于{ID['小红']},你的年纪不符合。")
  • 注意在使用 f时里面的引用必须是使用花括号 {}
# 输出结果
小白,出生于1999.13.46,年纪符合可以入伍
你好小红,出生于1888.14.42,你的年纪不符合。

3.添加键值对

字典是一种动态结构,可随时在其中添加键值对,要添加键值对,可依次指定字典名、用方括号[] 括起的键和相关联的值。

ID = {'小白': '1999.13.46', '小红': '1888.14.42'} # 创建字典
# 往字典添加键值对
ID['小明'] = '1877.14.56'
print(ID)
  • 注意添加的时候不是花括号是方括号
# 运行结果,成功添加进字典
{'小白': '1999.13.46', '小红': '1888.14.42', '小明': '1877.14.56'}

4.修改键值对

要修改字典中的值,可依次指定字典名、用方括号括起的键,以及与该键相关联的新值,例如小红的出生搞错了要修改:

ID = {'小白': '1999.13.46', '小红': '1888.14.42'}
ID['小明'] = '1877.14.56'
ID['小红'] = '1999.14.42' # 修改键:小红,对应的值:1999.14.42
print(ID)

  • 这样小红就符合要求入伍了,注意修改键值不会改变这对键值在字典中的位置
# 运行结果
{'小白': '1999.13.46', '小红': '1999.14.42', '小明': '1877.14.56'}

5.删除键值对

对于字典中不再需要的信息,可使用del 语句将相应的键值对彻底删除。使用del 语句时,必须指定字典名和要删除的键,例如小明不想报名了:

ID = {'小白': '1999.13.46', '小红': '1888.14.42'}
ID['小明'] = '1877.14.56'
ID['小红'] = '1999.14.42'
print(ID)
del ID['小明']  # 删除字典中键为小明的键值对
print(ID)
  • 注意删除之后是永久修改字典
# 运行结果
{'小白': '1999.13.46', '小红': '1999.14.42', '小明': '1877.14.56'}
{'小白': '1999.13.46', '小红': '1999.14.42'}

三、字典的进阶用法

1.由类似对象组成的字典

在上面众多的字典类型中,都是一行来展现字典的,或者说展现一种类型的字典,有时候字典太长就不太好找了,python的字典可以由每行来组成:

ID = {'小白': '1999.13.46',
    '小红': '1888.14.42',
    '小明': '1922.18.24',
    }
print(f"小白,出生于{ID['小白']},年纪符合可以入伍")
print(f"你好小红,出生于{ID['小红']},你的年纪不符合。")
  • 确定需要使用多行来定义字典时,要在输 入左花括号后按回车键。在下一行缩进四个空格,指定第一个键值对,并在它后面 加上一个逗号,这样在阅读字典时可以较为方便。
# 运行结果
小白,出生于1999.13.46,年纪符合可以入伍
你好小红,出生于1888.14.42,你的年纪不符合。

2.使用get() 来访问值

使用放在方括号内的键从字典中获取值时,可能会引发问题:如果指定的 键不存在就会出错。

ID = {'小白': '1999.13.46',
    '小红': '1888.14.42',
    '小明': '1922.18.24',
    }
print(ID['小绿'])
  • 这将导致Python显示traceback,指出存在键值错误(KeyError ):
Traceback (most recent call last):
  File "博客.py", line 5, in <module>
    print(ID['小绿'])
KeyError: '小绿

就字典来说,可使用 方法get() 在指定的键不存在时返回一个默认值,从而避免这样的错误。

ID = {'小白': '1999.13.46',
    '小红': '1888.14.42',
    '小明': '1922.18.24',
    }
print(ID.get('小绿', '没有这个人人的信息'))
  • 方法get() 的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存在时要返回的值,是可选的 (提示信息任写,想写什么写什么)
  • 如果字典中有键’小绿’ ,将获得与之相关联的值;如果没有,将获得指定的默认值。虽然这里没有键’小绿’ ,但将获得一条清晰的消息,不会引发错误:
# 运行结果
没有这个人人的信息

3.循环字典

在日常使用过程中,需要对字典的值进行全部的查询打印,这个时候就需要循环整个字典了,同样采用for循环:

ID = {'小白': '1999.13.46',
    '小红': '1888.14.42',
    '小明': '1922.18.24',
    }

for name, age in ID.items():
    print(f'你好{name},你的出生日期为{age}。')
  • .items() 方法会返回一个由字典中所有键值对(key-value pairs)组成的元组列表。每个元组包含两个元素,第一个元素是字典中的键(name),第二个元素是对应的值(age)。
# 运行结果
你好小白,你的出生日期为1999.13.46。
你好小红,你的出生日期为1888.14.42。
你好小明,你的出生日期为1922.18.24

4.遍历字典中的所有键

有时候不需要键的值,这时候 keys方法可以帮助实现:

ID = {'小白': '1999.13.46',
    '小红': '1888.14.42',
    '小明': '1922.18.24',
    }
for name in ID.keys():
    print(f'你好{name},欢迎你来报名。')
  • 注意:for name in ID.keys(): 等价于 for name in ID: ,这个ID后面没有写keys()为隐式写法,注意ID后面 隐式没有括号
# 运行结果
你好小白,欢迎你来报名。
你好小红,欢迎你来报名。
你好小明,欢迎你来报名。

5.遍历字典中所有的值

把遍历字典中所有的键的keys()替换成values()即可,简单粗暴,下一个!

6.遍历是剔除重复数值

在遍历的过程中可能会出现大量一样的值,这个在打印过程中可能不需要,这个时候可以使用 集合(set) 来实现,集合中的每个元素都必须是独一无二的:

age = {'小米': '12', '小红': '10', '小李': '20', '小花': '20'}
for ages in age.values():    # 循环出字典的值
    if ages in age.values(): # 检查值是否在字典中
        print(ages)  # 打印
  • 如果运行上面的程序会发现会打出重复数值:
# 运行结果
12
10
20
20

这个时候我们使用 集合set() 即可消除重复数值:

age = {'小米': '12', '小红': '10', '小李': '20', '小花': '20'}
for ages in set(age.values()):    # 循环出字典的值
   if ages in age.values(): # 检查值是否在字典中
       print(ages)  # 打印
  • 这个时候打印出来的就没有重复的了 注意集合为无序排列,每次的结果都可能不一样
# 运行结果
20
10
12

注意  可使用一对花括号直接创建集合,并在其中用逗号分隔元素:

集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有 键值对时,定义的很可能是集合。

不同于列表和字典,集合不会以特定的顺序 存储元素。

7.嵌套

有时候我们不止要将一个或者多个字典存储在列表中,或者将列表作为值存储在字典中,这样被成为嵌套

我们需要存储许多的个人信息,一个字典代表者一个人的个人信息,这个时候我们就可以创建一个信息列表来存储个人信息字典:

# 创建三个存储个人信息的字典
pim_1 = {'姓名': '李华', '出生日期': '2300年16月30日', '民族': '汉', '住址': '地球村中国1号'}
pim_2 = {'姓名': '李梅', '出生日期': '2199年14月3日', '民族': '汉', '住址': '地球村中国2号'}
pim_3 = {'姓名': '鸡仔', '出生日期': '2300年12月53日', '民族': '汉', '住址': '地球村中国3号'}
# 使用列表来存储字典——嵌套
pim = [pim_1, pim_2, pim_3]
# 打印出所有字典的信息
for pims in pim:    
    print(pims)

8.自动生产字典

在编写程序中,我们经常能够用到重复的字典,比如我们需要生产一窝蚂蚁的字典,这些字典的内容都是一样的,当然你也可以根据你的掌握程度编写出生成不一样的字典,代码格式如下:

pim_0 = []   # 创建一个空列表

for pims in range(30):   # reange函数为自动生成顺序数字函数,生成30个重复的pims字典
    pim = {'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'} # 重复字典内容
    pim_0.append(pim)  # 把每个循环生成的字典添加到列表pim_0的末尾
    # print(pim_0)    # 这行代码可以帮助我们更好的了解字典是这么存储在列表里面的,需要看的自行把最前面的#号去除
    
for pim_1 in pim_0[:5]:   # 循环打印列表,打印范围切片处理
    print(pim_1)  # 打印出前五个的字典
    print("输出完毕!")
    
print(f"你好,整个列表长度为{len(pim_0)}")  # 检测整个pim_0列表的长度
  • 这一个自动生成字典稍微有点复杂,需要大家耐心不懂就尝试把自己看不懂的代码输出来了解代码目前的状态
# 运行结果
{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}
{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}
{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}
{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}
{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}
输出完毕!
你好,整个列表长度为30
  • 这里让大家看看字典是怎么样存储在列表里面的,这就是我们刚才生成的字典在列表中的存储,对于python来说他们每一个都是独立的字典。
[{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}]
[{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}, {'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}]
[{'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}, {'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}, {'姓名': '外星人', '出生日期': '1999.19.19', '民族': '星球', '住址': '太阳'}]

9.在字典中存储列表

根据程序需求我们一个键对于的可以是一个列表,语法如下:

gem = {
    '钥匙': '15222',
    '注释': ['这是一个列表', '这里列表的用法跟单纯列表一样', '这既是字典,也可列表'],
}
print(f"您的密钥为:{gem['钥匙']}")
for gems in gem['注释']:
    print(f'\t' + gems)
  • 这个代码的注释我就不写了,应该都看得懂吧,理解一下代码尝试自己写注释
# 运行结果
您的密钥为:15222
	这是一个列表
	这里列表的用法跟单纯列表一样
	这既是字典,也可列表

10.在字典中嵌套字典

在各种各样的需求中,需要使用字典来存储字典的情况也不是不可能,现在来看一下语法结构:

# 创建一个字典包含字典的字典,哈哈哈哈哈别被绕晕了
user = {    # 注意格式
    '小米': {
        '出生': '1999.18.19',
        '住址': '地球村1号',
        '存款': '2000万元',
    },   # 这里别漏看了
    '小红': {
        '出生': '2000.19.19',
        '住址': '地球村2号',
        '存款': '1000万元',
    },
}
for users, userss in user.items():  # 创建循环把字典中的字典提取出来,要是看不懂现在提取到哪一步了,可以把目前的变量提取出来    
    print(f"你好{users},你的信息查询成功:")  # 打印出循环的键
    
    for a, b in userss.items():  # 再创建一个循环,因为上面循环出来的值仍然是一个字典
        
        if a == "出生":  # 进行if判定,精准输出对于的文字
           print(f"\t你的出生日期为{b}")
       
       elif a == "存款":
            print(f"\t你的存款为:{b}")
  • 现在开始的代码就稍微有点难度了,大家认真查看代码的注释及其运行过程
# 代码运行结果
你好小米,你的信息查询成功:
	你的出生日期为1999.18.19
	你的存款为:2000万元
你好小红,你的信息查询成功:
	你的出生日期为2000.19.19
	你的存款为:1000万元

这一节完美收尾,难度开始提高了,别放弃哇,继续学下去!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI_老猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值