字典(dict)

字典

用法

存储信息

字典是一种数据类型,可以存储一些信息。

a = [1,2,3,4,5] #列表存储
b = {1,2,3,4,5} #集合存储
c = (1,2,3,4,5) #元组存储

这些是其它数据类型存 (1,2,3,4,5) 的方式,但是我们不能用字典直接存储这些信息,每一项都要有键和值。

键和值

a = (1,2,3,4,5)
print(a[0])

我们可以用索引提取变量的值(从0开始),而字典的索引就是键。

famous_quotes = {"孔子":"君子有诸已,而后求诸人。",
                 "孟子":"独乐乐,与人乐乐,孰乐?",
                 "韩非子":"家有常业,虽饥不饿;国有常法,虽危不亡。"}
print(famous_quotes["孔子"])

这个程序可以查询名人名言。我用字典将名人名言(famous quotes)存储下来。当然,这个字典也可以起其他名字。但是是要记住,名字必须以字母或下划线开头,只能包含字母、下划线与数字!
这个程序中的键,就是名人的名字/尊称,比如孔子。famous_quotes["孔子"]这行代码是用来查询孔子名言的。
字典名称[键] 是利用键来寻找的格式。

我们还是那刚刚的那个程序来举例。

print(famous_quotes["孔子"])

这行代码是用来打印孔子名言的,打印的内容就是字典中:

“孔子”:“君子有诸已,而后求诸人。”

这项内容的值。
就相当于这个程序中的名言部分。

键与值

字典中存储一项的格式是"索引":“内容”,就像:

“孔子”:“君子有诸已,而后求诸人。”

两项之间用",“分隔,用”{}"包裹,比如:

fruit = {"red":"apple",
         "yellow":"banana",
         "purple":"grapes"}

调用方法:fruit["red"]

实例

名人名言

我们先研究刚刚的名人名言,因为还有一些可以改良的地方。
比如:

  1. 用户无法自由询查的名言
  2. 名人名言太少了
  3. 每个名人通常有不止一个名言
  4. ……
用户无法自由询查的名言

我们可以用input()函数,把程序改成:

famous_quotes = {"孔子":"君子有诸已,而后求诸人。",
                "孟子":"独乐乐,与人乐乐,孰乐?",
                "韩非子":"家有常业,虽饥不饿;国有常法,虽危不亡。"}
while True:
   a = input("请输入名人的名字/尊称,0退出。\n") #获取用户输入("\n"是换行符)
   if a != "0": #如果输入不为0
       if a in famous_quotes: #如果我们摘录了这个人的名言
           print(famous_quotes[a]) #打印名言
       else:
           print("我们还没有摘录此人的名言。") #如果我们没有摘录这个人的名言
   else:
       break #如果输入为0退出

请输入名人的名字/尊称,0退出。
孔子
君子有诸已,而后求诸人。
请输入名人的名字/尊称,0退出。
韩非子
家有常业,虽饥不饿;国有常法,虽危不亡。
请输入名人的名字/尊称,0退出。
孟子
独乐乐,与人乐乐,孰乐?
请输入名人的名字/尊称,0退出。
荀子
我们还没有摘录此人的名言。
请输入名人的名字/尊称,0退出。
0

第一个问题解决

名人名言太少了

我们可以添加字典项:

famous_quotes = {"孔子":"君子有诸已,而后求诸人。",
                 "孟子":"独乐乐,与人乐乐,孰乐?",
                 "韩非子":"家有常业,虽饥不饿;国有常法,虽危不亡。"}
while True:
    a = input("请输入名人的名字/尊称,0退出。\n") #获取用户输入("\n"是换行符)
    if a != "0": #如果输入不为0
        if a in famous_quotes: #如果我们摘录了这个人的名言
            print(famous_quotes[a]) #打印名言
        else:
            print("我们还没有摘录此人的名言。\n希望你能找到并帮我们写下来。") #如果我们没有摘录这个人的名言
            famous_quotes[a] = input() #用户输入
            print("谢谢你的帮助。\n") #感谢用户
    else:
        break #如果输入为0退出

请输入名人的名字/尊称,0退出。
荀子
我们还没有摘录此人的名言。
希望你能找到并帮我们写下来。
锲而舍之,朽木不折;锲而不舍,金石可镂。
谢谢你的帮助。

请输入名人的名字/尊称,0退出。
荀子
锲而舍之,朽木不折;锲而不舍,金石可镂。
请输入名人的名字/尊称,0退出。
0

第二个问题解决

每个名人通常有不止一个名言

每个人的名言是字符串的形式,我们可以改成列表形式。
修改后:

famous_quotes = {"孔子":["君子有诸已,而后求诸人。","人莫知其子之恶,莫知其苗之硕"],
                 "孟子":"独乐乐,与人乐乐,孰乐?",
                 "韩非子":"家有常业,虽饥不饿;国有常法,虽危不亡。"}
while True:
    a = input("请输入名人的名字/尊称,0退出。\n") #获取用户输入("\n"是换行符)
    if a != "0": #如果输入不为0
        if a in famous_quotes: #如果我们摘录了这个人的名言
            print(famous_quotes[a]) #打印名言
        else:
            print("我们还没有摘录此人的名言。\n希望你能找到并帮我们写下来。") #如果我们没有摘录这个人的名言
            famous_quotes[a] = input() #用户输入
            print("谢谢你的帮助。\n") #感谢用户
    else:
        break #如果输入为0退出

请输入名人的名字/尊称,0退出。
孔子
[‘君子有诸已,而后求诸人。’, ‘人莫知其子之恶,莫知其苗之硕’]
请输入名人的名字/尊称,0退出。
0

我只修改了孔子的名言,其他人的自行添加。
第三个问题解决

其它问题

这个程序的问题肯定不止这三个,其它问题这里就不一一列举了,可以根据这些函数来修改:

函数作用
clear()从字典中删除所有元素
copy()返回字典的副本
fromkeys()返回具有指定键和值的字典
get()返回指定键的值
items()返回包含每个键值对的元組的列表
keys()返回包含字典键的列表
pop()删除具有指定键的元素
popitem()刷除最后插入的键值对
setdefault()返回指定键的值(如果键不存在插入具有指定值的键)
update()使用指定的键值对更新字典
values()返回字典中所有值的列表
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值