一:字典
1、字典是一种可变容器模型,可以储存任意类型对象,且字典是无序的
2、字典的每对键值对用冒号分隔(key:value),每个键值对之间用逗号分隔,整个字典括在花括号中
d = { key1:value1 , key2:value2 ,key3:value3 }
3、字典中的键是唯一的,如果key重复,最后一个key值会替换前面的key值,字典中的key必须是不可变类型,如字符串,数字,元组,字典中的value可以为任何类型的数据
二:字典的增和改:(当key不存在时就是增,当key存在时就是改)
格式:字典名[ " key " ] = value
三:字典的删:
1、del
格式:del 字典名[ " key " ] 删除字典中指定的键值对
2、clear( )
格式:字典名.clear( )
3、pop( )
格式:字典名.pop( " key " ) pop删除字典的某个键值对后,会返回被删除的value
4、popitem( )
格式:字典名.popitem( ) 随机删除字典中的某一对键值对
四:字典的查:
1、字典名 [ " key " ] 这种方法查找时,若key不存在会报错
2、get( )
格式:字典名.get( " key " ) 这里使用的是小括号,
五:使用循环遍历字典:
六、keys( )、values( )、items( )
1、在python2中: 字典名.keys( ) 将字典所有的key以列表的形式输出
2、在python2中: 字典名.values( ) 将字典所有的value以列表的形式输出
3、在python2中: 字典名.items( ) 将字典中每一对键值对以列表的形式分别组成元组进行输出
4、在python3中,keys( )、values( )、items( ) 得到的是可迭代对象
七、字典的内置函数与方法
八:字典版名片管理系统
# coding:utf-8
#提示给用户的菜单信息
print("="*50) #分割线
print("\t 名片管理系统 v2.0版本") #显示系统版本信息
print("="*50) #分割线
print("请输入序号选择相应操作:") #提示用户可执行的操作
print(" 1 : 添加名片") #选择1,可以添加名片
print(" 2 : 删除名片") #选择2,可以删除名片
print(" 3 : 修改名片") #选择3,可以修改名片
print(" 4 : 查询指定名片") #选择4,可以查询指定名片
print(" 5 : 查询全部名片") #选择5,可以查询全部名片
print(" 6 : 退出系统") #选择6,则退出系统
print("="*50) #分割线
# 定义一个列表,用来存储名片
#names = []
pass_name="666"#账号
pass_word="777"#密码
new_pass_name = input("请输入安全账号:")
new_pass_word = input("请输入安全密码:")
i=0#定义个标志位
#调试用的列表
names = [
{"name": "杨老大", "age": 23, "addr": "公教楼", "tel": "156"},
{"name": "辛老大", "age": 23, "addr": "电气类", "tel": "158"},
{"name": "谢老大", "age": 22, "addr": "自习室", "tel": "133"},
{"name": "王老大", "age": 23, "addr": "图书馆", "tel": "187"}
]
if (new_pass_name==pass_name)and(new_pass_word==pass_word)and (i==0):
while True:
# 获取用户所选择的菜单信息
print() #空格
print() #空格
num = int(input("请选择您要进行的操作:")) #将收集到的信息转为int型 t
# 根据用户所选择的菜单信息执行相应的功能
if num == 1:
# 添加新的名片
while True: #死循环,当新添名片重名时,确保依旧停留在重新输入新名片信息的界面
print()
print()
print()
print("="*50)
print("\t\t 添加名片") #显示当前进行的操作
print("="*50)
print()
new_name = input("请输入姓名:") #获取新名片的 姓名
print()
#收集到用户输入的信息以后,拼接成想要存储的字典dict数据形式,即此时dict_info这个字典内存放的就是刚刚输入的名片信息
#遍历数据库列表信息,因为列表内存放的都是字典,所以第一次循环时,item就是字典1
for item in names:
if new_name == item["name"]: #item["name"]此时就是:字典名[键]
#如果刚刚输入的姓名和names内已有名片的姓名相同 ,则进入该if语句
print()
print("该用户已存在,请重新添加") #提示用户名片已存在,要求重新输入
break
else: #如果刚刚输入的姓名和names内已有名片的姓名不同 ,则进入该else语句
new_age = input("请输入年龄:") #获取新名片的 年龄
print()
new_addr = input("请输入地址:") #获取新名片的 地址
print()
new_tel = input("请输入电话:") #获取新名片的 电话
print()
dict_info = {"name": new_name, "age": new_age, "addr": new_addr, "tel": new_tel}
names.append(dict_info) #将刚刚输入的名片信息存到names中
print()
print("添加新名片[%s]成功!\n\n该名片信息为:%s"%(new_name,dict_info) ) #提示用户添加完成
break #添加完成,跳到操作菜单
elif num == 2:
# 删除一个名片
print()
print()
print()
print("="*50)
print("\t\t 删除名片") #显示当前进行的操作
print("="*50)
print()
for item in names: #打印出所有名片
print("\n姓名: %s 年龄: %s 地址: %s 电话: %s"%(item["name"],item["age"],item["addr"],item["tel"]))
print()
else: #for in else 语句使用时,只要不在for in语句内加上break语句打断循环,最后都会执行else语句
print()
print("以上为全部名片信息")
print()
del_name=input("请选择您要删除的名片:") #获取用户想要删除的名片信息
print()
sure_or_no = input("确定删除[%s]吗\t y/n"%(del_name)) #再次确认是否要删除
#if sur_or_no=="y":
#names.remove(names[del_name])
for item in names: #遍历
if (del_name == item["name"]) and (sure_or_no == "y"): #判断想要删除的名片是否存在,且用户是否决定删除
names.remove(item) #存在则删除
print()
print("名片[%s]已成功删除!"%del_name) #提示用户删除成功
break #跳出
else:
print()
print("删除失败,请重新尝试")#输入信息有误或名片并不存在,提示用户删除失败
#break #跳出
elif num == 3:
# 修改一个名片
print()
print()
print()
print("="*50)
print("\t\t 修改名片") #显示当前进行的操作
print("="*50)
print()
for item in names: #打印出所有名片
print("\n姓名: %s 年龄: %s 地址: %s 电话: %s"%(item["name"],item["age"],item["addr"],item["tel"]))
print()
mod_name=input("请选择您要修改的名片:") #获取想要修改的名片的信息
for item in names: #for循环遍历names
if mod_name == item["name"]:#判断是否存在该名片,存在则执行下面的if语句
break
else:
print()
print("您输入的信息有误!请重新尝试")#输入信息有误或名片并不存在,提示用户修改失败
#break
#names.index(item)
if mod_name == item["name"]:
after_mod_name = input("请输入该名片的新名字: ") #获取修改后名片的新名字
for items in names: #for循环遍历names
if after_mod_name == items["name"]:#判断是否重名,重名则退出
print()
print("该用户已存在,请重新输入")
break
else: #若不重名则修改新名片
after_mod_age = input("请输入该名片的新年龄: ") #获取修改后名片的新年龄
after_mod_addr = input("请输入该名片的新地址: ") #获取修改后名片的新地址
after_mod_tel = input("请输入该名片的新电话: ") #获取修改后名片的新电话
#item此时为想要修改的那个名字所对应的元素(字典),比如想要修改辛老大,那么此时item就是{"name": "辛老大", "age": 23, "addr": "科大电气类", "tel": "158"}
#names.index(item)获取这个元素(字典)在nams列表内的下标
#names[下标]获取列表内的某一个元素(字典)
#字典名[已存在的键]=new_value 修改已存在的键值对
names[names.index(item)]["name"]=after_mod_name #修改名片信息
names[names.index(item)]["age"]=after_mod_age #修改名片信息
names[names.index(item)]["addr"]=after_mod_addr #修改名片信息
names[names.index(item)]["tel"]=after_mod_tel #修改名片信息
print()
print()
print("名片修改成功,\n\n该名片的新信息为:姓名:%s 年龄:%s地址:%s电话:%s"%(after_mod_name,after_mod_age,after_mod_addr,after_mod_tel))
#提示用户名片已修改成功,并显示出修改后名片的信息
#break
elif num == 4:
# 查询指定名片
print()
print()
print()
print("="*50)
print("\t\t 查询指定名片") #显示当前进行的操作
print("="*50)
print()
name = input("请输入要查询的名片名字:")
for item in names:
if name == item["name"]: #打印名片信息
print()
print("\n姓名:%s年龄:%s地址:%s 电话:%s"%(item["name"],item["age"],item["addr"],item["tel"]))
break
else:
print()
print()
print("查无此人!")
elif num == 5:
# 查询全部名片
print()
print()
print()
print("="*50)
print("\t\t 查询所有名片") #显示当前进行的操作
print("="*50)
print()
num=len(names)
#print("现在有名片%s,\n共%s张"%(names,num))
for item in names: #打印出所有名片
print("\n姓名:%s年龄:%s地址:%s 电话: %s"%(item["name"],item["age"],item["addr"],item["tel"]))
print()
else:
print()
print("共%s张名片"%num) #显示名片数
elif num == 6:
# 退出系统
i+=1
break
else:
print()
print("您输入的信息有误,请重新输入!")
else:
print()
print("账号密码错误,退出系统")