zoukankan      html  css  js  c++  java
  • 05 字典

    本节主要内容:

    1.字典的简单介绍

    2.字典增删改查和其他操作

    3.字典的嵌套

    一.字典的简单介绍

    字典(dict)是python中唯一的一个映射类型.他是以{}括起来的键值对组成.在dict中key是唯一的.在保存的时候,根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法.所以,切记,在dict中存储的key-value中的key必须是可hash的,如果搞不懂什么是可哈希,暂时可这样记,可改变的都是不可哈希的,可哈希意味着不可变,这个是为了能准确的计算内存地址而规定的.

    已知的可哈希(不可变)的数据类型:int, str, tuple, bool

    不可哈希(可变)的数据类型:list, dict, set

    语法:

    {key1:value1, key2:value2...}

    注意:key 必须是不可变的(可哈希的), value没有要求,可以保存任意类型的数据

    # 合法
    dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['', '美⼥女女'], (1, 2, 3): '麻花藤'}
    print(dic[123])
    print(dic[True])
    print(dic['id'])
    print(dic['stu'])
    print(dic[(1, 2, 3)])
    # 不不合法
    # dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不不能作为key
    # dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不不能作为key
    dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不不能作为key

    dict保存的数据不是按照我们添加进去的顺序保存的,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切片工作,他只能通过key来获取dict中的数据

    二.字典的增删改查和其他相关操作

    1.增加

    dic = {}
    dic["王者荣耀"] = "男生都爱玩"   # 添加dic[字典中不存在的Key] = value
    dic["刺激战场"] = "吃鸡战场"
    dic["王者荣耀"] = "什么鬼"        # key如果重复了,会修改覆盖原来的值,
    
    # 流程:1.先判断key是否存在,如果存在,就不执行新增,如果不存在,执行新增
    dic.setdefault("宫本武藏", "很牛")
    dic.setdefault("宫本武藏", "我的宫本很菜")    # 如果key存在了就不会再添加了
    
    dic.setdefault("李白")    # None
    dic.setdefault("李白","")    # None
    print(dic)

    2.删除

    dict字典3.5以下的解释器时无序的
    dic = {"张无忌":"倚天屠龙记", "紫薇":"还珠格格", "王语嫣":"天龙八部","刘能":"乡村爱情协奏曲"}
    dic.pop("刘能")     # 指定某个key进行删除
    dic.pop("王语嫣")
    dic.popitem()         # 看起来是删除最后一个,实际上是随即删除的,因为是随机,因为底层是随机,无序的
    dic.popitem()
    
    del dic["紫薇"]
    
    # 清空字典中的所有内容
    dic.clear()
    print(dic)

    3.改

    dic = {"张无忌":"倚天屠龙记", "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
    # dic["王语嫣"] = "天龙九部"     # dic[已经存在的key] = 新value
    
    dic2 = {"张无忌": "魔教教主", "紫薇":"还珠格格第二部", "马大帅":"彪哥"}
    dic.update(dic2)  # 把dic2中的内容覆盖到dic中
    print(dic)

    4.查

    dic = {"张无忌":"倚天屠龙记", "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
    # print(dic["小燕子"]) # KeyError: '小燕子',如果key不存在,报错,keyerror
    print(dic.get("小燕子"))   # None 当key不存在的时候不会报错,默认返回None
    print(dic.get("晴儿", "没有"))  # 两个参数,如果第一个参数不存在.返回第二个操作作为默认值,如果存在直接返回value
    
    # setdefault
    # 流程 :
    # 1.先判断key是否存在,如果存在,就不执行新增,如果不存在,执行新增
    # 2.根据你给的key把value查询出来
    # setdefault() 新增
    dic = {"jay":"周杰伦"}
    ret = dic.setdefault("jay","林俊杰")
    print(dic)  # {'jay': '周杰伦'}
    print(dic, ret) # {'jay': '周杰伦'} 周杰伦
    dic = {"张无忌":"倚天屠龙记", "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
    # print(dic["小燕子"]) # KeyError: '小燕子',如果key不存在,报错,keyerror
    print(dic.get("小燕子"))   # None 当key不存在的时候不会报错,默认返回None
    print(dic.get("晴儿", "没有"))  # 两个参数,如果第一个参数不存在.返回第二个操作作为默认值,如果存在直接返回value
    
    # setdefault
    # 流程 :
    # 1.先判断key是否存在,如果存在,就不执行新增,如果不存在,执行新增
    # 2.根据你给的key把value查询出来
    # setdefault() 新增
    dic = {"jay":"周杰伦"}
    ret = dic.setdefault("jay","林俊杰")
    print(dic)  # {'jay': '周杰伦'}
    print(dic, ret) # {'jay': '周杰伦'} 周杰伦
    lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
    dic = {"key1":[], "key2":[]}
    for i in lst:
        if i > 66:
            dic["key1"].append(i)
        else:
            dic["key2"].append(i)
    print(dic)
    dic = {}
    
    for i in lst:
        if i > 66:
            dic.setdefault("key1", []).append(i)
        else:
            dic.setdefault("key2", []).append(i)
    print(dic)

     5. 其他相关操作

    dic = {"意大利":"西西里的美丽传说", "意大利2":"天堂电影院", "美国":"美国往事","美国电视剧":"越狱"}
    
    print(dic.keys())   # 返回的内容想列表,但是不是列表
    # dict_keys(['意大利', '意大利2', '美国', '美国电视剧'])
    for k in dic.keys():    # 可以迭代,拿到的是每一个key
          print(k)
    for k in dic:           # 如果就是k in dic,取得的结果跟 k in dic.keys()是一样的,
        print(k)
    # 意大利
    # 意大利2
    # 美国
    # 美国电视剧
    
    print(dic.values())
    # dict_values(['西西里的美丽传说', '天堂电影院', '美国往事', '越狱'])
    for v in dic.values():
        print(v)
    
    
    print(dic.items())  # 返回键值对(key, value)
    # dict_items([('意大利', '西西里的美丽传说'), ('意大利2', '天堂电影院'), ('美国', '美国往事'), ('美国电视剧', '越狱')])
    # 遍历字典的最好的方案
    for k,v in dic.items():     # item 是元组(key, value)
        print(k, v)
    
    # 意大利 西西里的美丽传说
    # 意大利2 天堂电影院
    # 美国 美国往事
    # 美国电视剧 越狱
    
    # 元组可以进行解包
    # a, b, c = (1, 2, 3)     # 解构, 解包
    # print(a,b)

      a, b, c = (1, 2, )     # 解构, 解包 解构的时候注意数量量必须匹配
    ValueError: not enough values to unpack (expected 3, got 2)
    # 真正的字典的迭代 # 直接循环字典拿到的是key for k in dic: print(k) print(dic[k])
  • 相关阅读:
    【Offer】[5] 【替换空格】
    【Offer】[3-2] 【不修改数组找出重复的数字】
    【Offer】[3-1] 【找出数组中重复的数字】
    【Spring】 IOC Base
    【Java并发】CallBack和Future模式
    【Java并发】并发队列与线程池
    【Java并发】几个常用API
    linux基础_vi和vim快捷键
    python_字典
    python_列表方法
  • 原文地址:https://www.cnblogs.com/zero-zero-zero/p/9839382.html
Copyright © 2011-2022 走看看