字典是键值映射的数据结构 key--value
是无序的 不能够切片 不能像列表一通过下标去索引
是可变数据类型:当该数据类型对应的变量的值发生了变化时,它对应的内存地址不发生改变。
字典的key -- 天生去重
# >>> d1 = {"a":1, "b":2, "a":4}
# >>> d1
# {'a': 4, 'b': 2}
# >>>
key 必须是可hash对象 -- key必须是不可变数据类型
value可以是任何值
# >>> d1= {(1, 2) : "abc"}
# >>> d1[(1, 2)]
# 'abc'
# >>>
字典的定义:
my_dict = {} 或者 my_dict = dict()
# d1 = {"name":"rose", "age":18}
字典的取值
my_dict[key] = value
get -- 获取值,如果找不到这个key 它不会报错
get还可以设置默认值
d1 = {"a":1, "b":2}
print(dir(d1))
print(d1.get("a"))
#不存在的取值不会报错只会为空
print(d1.get("xx")) #没有取到xx的值,默认返回None
#取不到就默认返回10
print(d1.get("xx", 10)) #没有取到xx的值,默认返回10
#取到的值就返回值
print(d1.get("b", 20)) #取到了b的值,就返回b的值2
新增和修改
key存在就是修改
key不存在就是新增
# d1["c"] = 3
# print(d1.get("c"))
# d1["a"] = 10
# print(d1.get("a"))
练习 :从键盘输入任意字符串统计每个字符出现的次数,把结果保存在字典里输出
第一种方法
x = list(input("please input:"))
dic_count = dict()
for i in x:
if i in dic_count:
dic_count[i] += 1
else:
dic_count[i] = 1
print(dic_count)
第二种方法
d = {}
for i in x:
d[i] = x.count(i)
print(d)
第三种方法
y = []
z = []
for i in x:
y.append(i)
for j in y:
z.append(y.count(j))
print(dict(zip(y,z)))
第四种方法
input_str = input("please input:")
d = {}
for i in input_str:
d[i] = d.get(i,0) + 1
print(d)
字典的遍历
d1 = {"a":1, "b":3, "c":5}
for i in d1:
print(i)
#用一个变量去接收,返回key和value的元组
for i in d1.items():
print(i)
#用两个变量去接收,分别赋给两个变量的值
for k, v in d1.items():
print(f"{k}-->{v}")
#成员关系判断 -- 默认情况下判断key
print("a" in d1)
print(1 in d1)
#判断d1的values
print( d1.values() )
print(1 in d1.values())
#看字典有哪些key
print(d1.keys())
练习:
学生信息 姓名,年龄, 爱好 写一个信息管理系统 1.添加学生信息 姓名 年龄 爱好 2.查询学生信息 输入名字 -- 可以展示爱好和年龄 无限制添加,查看 按q退出
#第一种方法
stuinfo = {}
print("1、添加学生信息")
print("2、查询学生信息")
while 1:
choice = input("请输入你的选择:")
if choice == "q":
break
elif choice =="1":
name, age, hobby = input("请输入你的名字、年龄、爱好(空白分割)").split()
stuinfo[name] = {"age":age, "hobby":hobby}
print(name, age,hobby)
elif choice == "2":
name = input("请输入你的名字:")
print(f"{name}的年龄是{stuinfo[name]['age']},爱好是{stuinfo[name]['hobby']}")
else:
print("输入有误!请重新输入")
#第二种方法
#初始化学生字典
student_info = {}
#循环
while True:
choice = input("------------\n1.添加学生信息\n2.查询学生信息\n输入'q'退出\n输入相应编号进行操作:")
if choice == "q" or choice == "Q": #用户退出
break
elif choice == "1": #添加信息
name = input("请输入学生姓名:")
age = input("请输入学生年龄:")
hobby = input("请输入学生爱好:")
stu_name = f"{name}", "_name"
stu_age = f"{name}", "_age"
stu_hobby = f"{name}", "_hobby"
student_info[stu_name] = name
student_info[stu_age] = age
student_info[stu_hobby] = hobby
continue
elif choice == "2": #查询信息
name = input("请输入要查询的学生姓名:")
stu_name = f"{name}", "_name"
stu_age = f"{name}", "_age"
stu_hobby = f"{name}", "_hobby"
if student_info.get(stu_name,"null") == "null":
print("没有查询该学生信息")
continue
else:
print(f"学生信息:\n学生姓名:{student_info.get(stu_name)}\n"
f"学生年龄:{student_info.get(stu_age)}\n"
f"学生爱好:{student_info.get(stu_hobby)}")
else:
print("非法输入")