zoukankan      html  css  js  c++  java
  • 05,.字典,集合

    1.什么是字典
    字典是以key:value的形式来保存数据,用{}表示.   存储的是key:value
    坑: 字典存储数据的时候是用的hash值来存储. 算法不能变(python的)
    # 数据必须是不可变的(可哈希). 字典的key必须是可哈希的(不可变).
    dic = {"jay":"周杰伦", "jj": "林俊杰", "jolin":"蔡依林"}
    print(dic['jay']) # 周杰伦
    dic['jay'] = "麻花藤"       #字典的key是不变的,可以通过key来带出value的信息
    2.字典的增删改查
       1.增加,添加:
       dic[新key] = 元素
    dic = {"意大利": "李云龙", "美国": "美国往事"}
    dic["日本"] = "东京审判"  # 新key表示添加
    dic['韩国'] = "釜山行
    dic["日本"] = "鬼片"
       setdefault()(难点)   有添加的功能,如果key是存在的,不添加,    setdefault("","")
    dic = {"意大利": "李云龙", "美国": "美国往事"}
    dic.setdefault("美国", "三傻大闹宝莱坞")
    print(dic)
        2.删除
        pop(key) 主要要记得,删除key后,同value一起删除掉
    dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
    dic.pop("郭德纲")
    print(dic)     #{'张艺谋': '红高粱', '李安': '断臂山', '陈凯歌': '霸王别姬'}
        popitem()   随机删除一项,在python早期的版本,字典是无序的
    dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
    dic.popitem()   # 随机删除一项. 在python早期版本  字典是无序的.
    print(dic)   #{'张艺谋': '红高粱', '李安': '断臂山', '陈凯歌': '霸王别姬'}
        clear()   清空字典中的所有内容
        del dic["key"]    跟pop的区别在于使用的语法:pop(key)
    dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
    del dic["李安"]
    print(dic)   #{'张艺谋': '红高粱', '陈凯歌': '霸王别姬', '郭德纲': '祖宗十九代'}
        3.修改
    dic[老key] = 值
    dic = {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"}
    dic['河南'] = "烩面" # 老key = 值
    print(dic)
         update()    更新字典
    dic = {"id": 123, "name": 'sylar', "age": 18} 
    dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"} 
    dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存 在key, 则新增.
    print(dic) 
    print(dic1)
         4.查询
         dic[key]
    dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}     #  直接使用key就可以拿到value 
    print(dic1["赵四四"]) # KeyError: '赵四四' key不存在
         get(key,值)
     print(dic1.get("刘能能"))  # None 当key不存在返回None
     print(dic1.get("刘能能", "没有这个人")) # 当key不存在. 返回第二个参数. 默认第二个参数是None
         setdefault("key","value")   第一个功能是天加(当key不存在的时候).   第二个功能是查询(根据你给的key查询).   如果key不存在,先执行新增的操作,在使用key把对应的value查询出来
    3.字典的相关操作
           1. keys() 获取到所有的键
    dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"} 
    print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是什么.当 成list来⽤就⾏ 
    for key in dic.keys(): 
    print(key)
            2. values() 获取到所有的值
    dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
    for value in dic.values(): 
    print(value)
            3. items() 拿到所有的键值对
    dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
    print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科⽐')]) 这个东⻄也是list. 只不过list中装的是tuple for key, value in dic.items(): # ?? 这个是解构 
    print(key, value)
    4..字典的嵌套
       
    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         #在children里面新建字典{"age":"2"}
    print(wf)
    # print(wf['zhuli']['name'])         #输出名字
    print(wf)
    # 汪峰老婆替身的名字
    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)

    5.集合(不重要).去重复     唯一能用到的点,就是去重复
    s = {"周润发", "大润发", "王润发", "周润发"} # 不重复的
    print(s)      #{'大润发', '周润发', '王润发'}
    集合和字典,是没有索引和切片的
    集合中的元素是不可重复的.必须是可哈希的(不可变),字典中的key
    lst = ["麻将", "牌九", "骰子", "扑克", "骰子", "扑克", "扑克", "扑克"]
    #  把列表转化成集合  x 转化成y类型 y()
     s = set(lst)
     print(s)
    # 把集合变回列表
    # lst = list(s)
    print(lst) # 顺序是乱的
    空集合:set()
    空元组: tuple()
    空列表: list()
    非空集合:{123}
    新增:
       add   添加    #需要记住的
    s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
    s.add("刘嘉玲") 
    print(s)
       update   迭代更新
    s.update({"刘嘉玲", "刘能", "赵四"}) # 迭代更新
    print(s)
    删除:
     pop() 随机弹一个,随机删除
    ret = s.pop() # 随机删除一个
    print(s)
    print(ret)
     remove()   指定删除
    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)
     
  • 相关阅读:
    一个棒棒糖引发的。。。
    做完了一个程序
    C# 串口操作系列(2) 入门篇,为什么我的串口程序在关闭串口时候会死锁 ? .
    MSSQL操作类
    煤矿粉尘监控系统需求分析
    C# 串口操作系列(3) 协议篇,二进制协议数据解析 .
    wp7 手机归属地查询
    .NET设计模式系列文章
    C# 串口操作系列(1) 入门篇,一个标准的,简陋的串口例子。
    常用经典算法
  • 原文地址:https://www.cnblogs.com/yanghongtao/p/10046749.html
Copyright © 2011-2022 走看看