zoukankan      html  css  js  c++  java
  • 字典以及相关操作,集合的一些讲解

    一、什么是字典

      字典是以key:value的形式来保存数据

      用{}表示,存储的是key:value

    dic = {"jay":"周杰伦", "王力宏":["龙的传人", "唯一", "改变自己"], ["战狼", "战狼2"]: "武警"}
    print(dic)
    

      

      二、字典的增删该查(重点)

        1.字典的添加

          dic[新key] = 值

    dic = {"意大利": "李云龙", "美国": "美国往事"}
    dic["日本"] = "东京审判"  # 新key表示添加
    print(dic)
    

          

          setdefault() (难点)

        有添加的功能,如果key是存在的. 不添加

        流程: 判断你给的key是否在字典中存在了.如果已经存在了. 就不再新增. 如果不存在. 执行新增操作

    dic = {"意大利": "李云龙", "美国": "美国往事"}
    dic.setdefault("美国", "三傻大闹宝莱坞")
    print(dic)
    

        

        2.删除

        pop(key)

        删除指定key值的value

    dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
    dic.pop("郭德纲") # 你要记住的
    print(dic)
    

        

        popitem() 

        删除最后一项,在python早期版本中字典是无序的,随机删除一项(2.x版本)

    dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
    dic.popitem()
    print(dic)
    

        3.修改

        dic(key(旧)) = 值

    dic = {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"}
    dic['河南'] = "烩面" # 老key = 值
    print(dic)
    

        

        update()更新字典

        把dic2怼到dic1里面. 把dict2中的内容更新到dic1

    dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    dic2 = {"赵四":"宝宝", "刘能":"萌萌", "皮校长":"皮长山"}
    dic1.update(dic2) # 把dic2怼到dic1里面. 把dict2中的内容更新到dic1
    print(dic1)
    print(dic2)
    

        

        4.查询

        dic[key值]

    dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    print(dic1["赵四"]) 
    
    #如果print的是
    print(dic1["赵四四"]) # KeyError: '赵四四' key不存在
    

        

        get(key,value)

         当key不存在. 返回第二个参数. 默认第二个参数是None

    dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    print(dic1.get("刘能"))
    print(dic1.get("刘能能", "没有这个人")) # 当key不存在. 返回第二个参数. 默认第二个参数是None
    

      

        setdefault(key, value)

        setdefault() 第一个功能是添加(当key不存在). 第二个功能是查询(根据你给的key查询)整个执行流程: 判断给的key是否存在. 如果存在. 就不执行新增流程.直接查询出这个key对应的value如果key不存在. 先执行新增操作. 再使用key把对应的value查询出来

    dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    ret = dic1.setdefault("皮长山", "皮校长")
    print(ret) # 皮校长
    
    ret = dic1.setdefault("王木生", "宝宝")
    print(ret) # 范伟
    

      

        5.遍历,字典是一个可迭代对象

         for循环

    dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    for key in dic: # 直接循环字典拿到的是key, 有key直接拿value
    print(key)
    print(dic[key])
    

         

       不常用的:

         keys()

          拿到字典里的每一个key

    dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    print(dic.keys()) # dict_keys(['赵四', '刘能', '王木生']) 像列表. 山寨列表
    for k in dic.keys(): # 拿到的是字典中的每一个key
        print(k)
    

          

          values()

          当需要单独获取到所有的value的时候

    print(dic.values()) # dict_values(['刘晓光', '王晓利', '范伟'])  所有的value的一个数据集
    for v in dic.values():
        print(v)
    

          

          解构

    # 遍历字典两套方案
    dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
    #1. 使用for循环直接遍历字典的key
    for key in dic:
        print(key)
        print(dic[key])
    
    #2. 可以使用字典的items()+解构可以直接获取到key和value
    for k, v in dic.items():
        print(k)
        print(v)
    

    三、字典的嵌套

      字典的嵌套. 字典套字典

      一层一层的去找

      例子:

          

    wf = {
        "name":"汪峰",
        "age":52,
        "hobby":["唱歌", "上头条", "穿皮裤"],
        "wife": {
            "name": "章子怡",
            "age": 49,
            "hobby":["演戏", "上电视", "当导师"],
            "tishen": {
                "name":"萌萌",
                "age":28
            },
            "zhuli":{
               "name":"磊磊",
               "age": 20
            }
        },
        "zhuli":{
            "name":"宝宝",
            "age":23,
            "hobby":["抽烟","喝酒","烫头"]
        },
        "children":[{"name":"汪老大"}, {"name":"汪老二"}]
    }
    wf['children'][1]["age"] = 2
    
    # 汪峰老婆替身的名字
    print(wf['wife']['tishen']['name'])
    
    # 汪峰老婆的第二个爱好
    print(wf['wife']['hobby'][1])
    
    # 汪峰助理的第三个爱好
    print(wf['zhuli']['hobby'][2])
    
    
    # 汪峰的助理+10岁
    wf['zhuli']['age'] = wf['zhuli']['age'] + 10
    
    # 汪峰的老婆添加一个爱好("导戏")
    wf['wife']['hobby'].append("导戏") # 添加完毕了
    
    # 删除汪峰助理的"抽烟"爱好
    wf["zhuli"]["hobby"].remove("抽烟")
    
    print(wf)
    

      

    四、集合

      去重复

      集合中的元素是不重要的,必须是可hash的(不可变),例如字典中的key

      空集合:set()

      空元组:tuple()

      空列表:list()

      非空集合:例如 {123}集合,集合其实就是不存value的字典

      由于不太重要这里就不一一讲解了,下面是关于集合的例子

      

    s = {"周润发", "大润发", "王润发", "周润发"} # 不重复的
    print(s)
    
    # 唯一能用到的点. 去重复
    lst = ["麻将", "牌九", "骰子", "扑克", "骰子", "扑克", "扑克", "扑克", ]
    
    # 把列表转化成集合  x 转化成y类型 y()
    s = set(lst)
    # print(s)
    # 把集合变回列表
    lst = list(s)
    print(lst) # 顺序是乱的
    
    
    s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
    s.add("刘嘉玲") # 记
    print(s)
    
    s.update({"刘嘉玲", "刘能", "赵四"}) # 迭代更新
    print(s)
    
    ret = s.pop() # 随机删除一个
    print(s)
    print(ret)
    
    s.remove("罗纳尔多")
    print(s)
    
    集合还有字典. 是没有索引和切片的
    
    
    s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
    把罗纳尔多修改成梅西
    s.remove("罗纳尔多")
    s.add("梅西")
    print(s)
    
    迭代
    for el in s:
        print(el)
    
    
    s1 = {"门神", "灯神", "灯神你在笑什么?"}
    s2 = {"门神", "灯神", "你俩在干什么?"}
    
    交集
    print(s1 & s2)
    print(s1.intersection(s2))
    
    并集
    print(s1 | s2)
    print(s1.union(s2))
    
    # 差集
    print(s1 - s2) # s1中特有的内容
    print(s1.difference(s2))
    
    # 反交集
    print(s1 ^ s2) # 两个集合中特有的内容
    print(s1.symmetric_difference(s2))
    
    集合本身是可变的数据类型 . 不可哈希
    集合套集合->不能互相嵌套的
    集合中的元素必须可哈希(不可变的)
    s = {123}
    
    如果非要集合套集合
    s = frozenset({"哈哈","呵呵"}) # 不可变的数据类型(集合)
    for el in s:
        print(el)
    

      

        

        

  • 相关阅读:
    [Jsp] JSP的九个内置对象
    [Linux] 完整删除用户帐号
    Title:it has been a long time.
    Problem and Solution : Unable to resolve target 'android9'
    Click Button to change the color of TextView
    Bundle使用(不同的Activity之间传递数据)
    实例方法和类方法
    Use DIffent Font and Size.
    子类继承的成员方法
    StartActivityForResutl,Bundle(Return data to exActivity)
  • 原文地址:https://www.cnblogs.com/guchenxu/p/10046752.html
Copyright © 2011-2022 走看看