1.7.4字典

字典

字典(dictionaries):
1.也是一种容器, 不同于列表, 元组, 字典是无序的.
2.可改变, 可以增加数据, 修改数据, 删除数据. 查询数据
字典由键值对组成.没有索引, 通过键查找数据.
3.注意:
字典中的键相当于列表,元组中的索引, 所以是唯一的, 键不能重复(值可以重复出现)
字典的写法: {键1: 值1, 键2: 值2, 键3: 值3}

  • 创建字典

    # 1.声明一个空字典, 注意命名: 不能用 dict 这个单词
    dict1 = {}
    print(dict1, type(dict1))
    # 2.创建一个非空字典
    dict2 = {"name": "张艺兴", "age": 16, "sex": "男"}
    print(dict2)
    dict3 = {"对抗路": "花木兰", "打野路": "孙悟空", "中路": "武则天", "射手位": "马可波罗", "辅助位": "张飞"}
    print(dict3)
    # 3.使用dict() 函数创建字典
    dict4 = dict(name="卢俊义", age=16, sex="男")
    print(dict4)
    
  • 字典的键与值

    # 4.字典的键可以用什么类型的数据?
    # 键: 可以用整型, 字符串来表示, 也可以用浮点型表示, 还可以用布尔型, None
    # 可以用元组来做字典的 键, 列表不可以做键, 字典不可以做键.  列表和字典是可以改变的,所以不能做字典的键, 字典的键是不变的.
    d1 = {False: "zero", True: "one", 2.0: "two", (1,): "three", "4": "four"}
    # TypeError: unhashable(不可哈希) type: 'list'
    # TypeError: unhashable type: 'dict'
    print(d1)
    # 5.字典的值可以用什么类型的数据?
    # 字典值: 可以用 整型, 浮点型, 字符串, 布尔值, 列表, 元组, 字典 None 表示
    d2 = {"整型": 123, "浮点型": 3.11415926, "字符串": "动手敲键盘", "布尔型": True, "列表": [11, 22], "元组": (1, 2, 3), "字典": {"字典": {}}, None: None}
    print(d2)
    
  • 字典的数据添加与修改

    # 6.字典数据添加, 字典名[键] = 值
    d3 = {}
    d3["name"] = "高球"
    print(d3)
    d3["age"] = 16
    d3["height"] = 175
    d3["weight"] = 110.2
    print(d3)
    # 7.字典数据修改  字典名[要修改的键] = 新值
    d3["name"] = "吴奇隆"
    print(d3)
    
  • 字典数据查询与删除

    # 8.查询字典数据, 根据字典的键来查询对应的值, 
    print(d3["name"])
    print(d3["age"])
    print(d3["weight"])
    
    # 9.删除字典数据 使用del关键字用来删除数据
    del d3["age"]
    print(d3)
    del d3["height"]
    print(d3)
    
  • 字典查询函数

    # 创建字典
    lol = {"上单": "鳄鱼", "中路": "沙皇", "下路": "伊泽瑞尔", "打野": "莉莉娅", "辅助": "锤石"}
    print(lol)
    # 1.get(): 括号中填入字典的键, 用来获取相对应的值. 当填的键不存在时,返回值为None.第二个参数填写一个备用数值, 当我们要查询的键不存在则返回备用的数值.
    v = lol.get("中路")
    print(v)
    v = lol.get("坦克", "泰坦")
    print(v)
    # 创建字典, 值为列表
    movie_star = {"武打电影": ["成龙", "甄子丹", "李连杰"], "喜剧电影": ["沈腾", "徐峥", "周星驰", "王宝强"], "恐怖电影": ["林正英", "午马"], "战争电影": ["张译", "吴京", "鹿晗", "欧豪"]}
    print(movie_star)
    # 2.遍历字典
    # 直接遍历字典, 得到的是字典中的键
    for m in movie_star:
        print(m)
    # key: 键   value: 值
    # 4.items(): movie_star.items() 会将字典打包成一个列表嵌套元组, 元组中放入键值对.
    # 一个变量遍历字典items 会得到键值对打包的元组.
    for t in movie_star.items():
        print(t)
    # 两个变量遍历字典items 会得到键和值
    for key, value in movie_star.items():
        print(f"键:{key} - 值: {value}")
    # 5.keys()取键: 取出字典中所有的键, 放到一个列表中
    print(movie_star.keys())
    for k in movie_star.keys():
        print(k)
    # 6.values()取值: 取出字典中所有的值, 放到一个列表中
    print(movie_star.values())
    for v in movie_star.values():
        print(v)
    
  • 字典值删除

    # 7.pop(): 括号中填写字典的键, 对这个键值对进行一个删除. 返回值是键对应的值.
    print("-----------------------------")
    m = movie_star.pop("恐怖电影")
    print(movie_star)
    print(m)
    # 8.popitem(): 删除还是排在最后的键值对. 返回值是元组, 键值对放在元组中.
    print("-----------------------------")
    m = lol.popitem()
    print(m)
    # 9.clear(): 清空字典.
    movie_star.clear()
    print(movie_star)
    
  • 字典案例

    手机销售系统(用字典写):

    1. 创建一个字典,键:手机品牌做键, 值: 手机的信息(型号,价格,库存)
      
    2. 根据查询字典的方法增加增删改查
    
      3. 将字典的增删改查写入每个功能选项
    
phones = {"华为": ["华为mate40", 4999, 5000], "苹果": ["iphone12", 5100, 6000], "小米": ["小米10", 5999, 8000], "vivo": ["vivo-x50", 5498, 8000]}

# 系统循环起来
while True:
    print("""
    ---------------------------------------------
    |                                           |
    |         欢迎您来到手机购买系统!          |
    |            1.查看所有的手机品牌           |
    |            2.购买手机                     |
    |            3.更改手机库存信息             |
    |            4.移除手机库存信息             |
    |            5.退出系统                     |
    ---------------------------------------------
    """)
    # 首先让用户键盘输入选择的序号
    num = input("请输入您要操作的序号:")
    # 这个while判断循环,判断num是否为我们的选项,不是从新输入
    while num not in ["1", "2", "3", "4", "5"]:
        num = input("输入序号错误,请重新输入: ")

    if num == "1":
        # 没有写功能,就先写个pass保证这个地方不会报错
        # pass   # 相当于什么都不执行
        print("以下是本店所有的手机信息:")
        for k in phones.keys():
            # 取字典的键
            print(k)
            # 取字典的值, 值是列表,存放手机信息
            phone_list = phones[k]
            # 输出列表中的手机信息
            print("     手机型号:%s  手机价格:%d 手机库存:%d" % (phone_list[0], phone_list[1], phone_list[2]))

    elif num == "2":
        print("欢迎您购买手机")
        # 输入手机品牌,进行购买
        logo = input("请输入您要购买的品牌:")
        # 判断手机品牌字典中是否有
        # phones.keys()  是一个列表, 相当于
        # ["华为", "苹果", "小米", "vivo"]
        while logo not in phones.keys():
            logo = input("输入品牌不存在,请查询后再输入:")
        # 输出手机相关的信息
        print(f"""
            {logo}
            手机型号:{phones[logo][0]}
            手机价格: {phones[logo][1]}
            手机库存:{phones[logo][2]}
        """)
        # 键盘输入购买的数量,转成int类型,给库存做一个计算
        number = int(input("请输入购买的数量:"))
        while number <= 0 or number > phones[logo][2]:
            number = int(input("输入购买数量不正确,请重新输入:"))
        # 库存值
        phones[logo][2] -= number   # 假如说买的数量过多库存不足
        # 手机总消费:手机单价 * 买的手机数量
        print(f"顾客您好!总共消费 {phones[logo][1] * number} 元")
        print("购买成功,正在扣除费用,请稍后...")
    elif num == "3":
        print("库存信息修改")
        logo = input("请输入您要修改信息的品牌:")
        while logo not in phones.keys():
            logo = input("输入品牌不存在,请查询后再输入:")
        print(f"""
                   {logo}
                   手机型号:{phones[logo][0]}
                   手机价格: {phones[logo][1]}
                   手机库存:{phones[logo][2]}
               """)
        phones[logo][0] = input("输入手机型号:")
        phones[logo][1] = int(input("输入手机价格:"))
        phones[logo][2] = int(input("输入手机库存:"))
        print(f"""
                   {logo} 牌手机信息已经被修改
                   手机型号:{phones[logo][0]}
                   手机价格: {phones[logo][1]}
                   手机库存:{phones[logo][2]}
               """)
    elif num == "4":
        print("库存信息删除")
        logo = input("请输入您要删除信息的品牌:")
        while logo not in phones.keys():
            logo = input("输入品牌不存在,请查询后再输入:")
        # 第一种删除方法,pop()函数,括号中方如要删除的字典的键,删除键值对
        phones.pop(logo)
        # 第二种 使用del关键字。
        # del phones[logo]
        print(f"{logo} 相关信息已经被删除")

    elif num == "5":
        # 结束程序
        exit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值