【无标题】Python学习笔记 -- 容器类型 --字典

字典是键值映射的数据结构        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("非法输入")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值