字典
用法
存储信息
字典是一种数据类型,可以存储一些信息。
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"]
实例
名人名言
我们先研究刚刚的名人名言,因为还有一些可以改良的地方。
比如:
- 用户无法自由询查的名言
- 名人名言太少了
- 每个名人通常有不止一个名言
- ……
用户无法自由询查的名言
我们可以用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() | 返回字典中所有值的列表 |