00000000000
00000000000
9天前 · 3 人阅读

1.字典

概念
    无序的, 可变的键值对集合
定义
    方式1
        {key: value, key: value...}
        例如
            {"name": "sz", "age": 18}
    方式2
        fromkeys(S, v=None)
            静态方法
                类和对象都可以调用
            类调用
                dict.fromkeys("abc", 666)
                    {'a': 666, 'c': 666, 'b': 666}
                此处的dict, 是指字典类型
            对象调用
                dic.fromkeys("abc", 666)
                    {'a': 666, 'c': 666, 'b': 666}
                此处的dic, 是实例化的字典对象
    注意
        key不能重复
            如果重复
            后值会把前值覆盖
        key必须是任意不可变类型
            例如
                可变
                    列表
                    字典
                    可变集合
                    ...
                不可变
                    数值
                    布尔
                    字符串
                    元组
                    ...
        原因
            Python的字典, 采用哈希(hash)的方式实现
            简单存储过程
                初始化一个表格, 用来存放所有的值
                    这个表格称之为"哈希表"
                    暂且可理解为我们所学的 "列表"
                在存储一个键值对的时候, 会作如下操作
                    根据给定的key, 通过某些操作, 得到一个在"哈希表"中的索引位置
                        把key通过 "哈希函数" 转换成一个整型数字
                            称为 "哈希值"
                        将该数字对数组长度进行取余,取余结果就当作数组的下标
                        如果产生了"哈希冲突"
                            比如, 两个不同的key, 计算出来的索引, 是同一个
                            则采用"开发寻址法"
                                通过探测函数查找下一个空位
                    根据索引位置, 存储给定的"值"
            简单查找过程
                再次使用哈希函数将key转换为对应的列表的索引,并定位到列表的位置获取value
存在意义
    可以通过key, 访问对应的值, 使得这种访问更具意义
        person["name"]
        表述的是获取一个人的姓名
    查询效率得到很大提升
        可想象"汉字字典"的使用方式
            直接根据指定的key找到对应的页码, 从而找到这个汉字
            不需要一页一页的翻着找
常用操作
    增
        dic[key] = value
            当key在原字典中不存在时, 即为新增操作
    删
        del  dic[key]
            key, 必须要存在
        dic.pop(key[, default])
            删除指定的键值对, 并返回对应的值
            如果key, 不存在, 那么直接返回给定的default值; 不作删除动作
            如果没有给定默认值, 则报错
                
        dic.popitem()
            删除按升序排序后的第一个键值对, 并以元组的形式返回该键值对
            如果字典为空, 则报错
                
        dic.clear()
            删除字典内所有键值对
                返回None
            注意, 字典对象本身还存在, 只不过内容被清空
                注意和del的区别
    改
        只能改值, 不能改key
        修改单个键值对
            dic[key] = value
                直接设置, 如果key不存在, 则新增, 存在则修改
        批量修改键值对
            oldDic.update(newDic)
                根据新的字典, 批量更新旧字典中的键值对
                如果旧字典没有对应的key, 则新增键值对
    查
        获取单个值
            方式1
                dic[key]
                    如果key, 不存在, 会报错
                        
            方式2
                dic.get(key[, default])
                    如果不存在对应的key, 则取给定的默认值default
                    如果没有默认值,  则为None
                        但不会报错
                    但是, 原字典不会新增这个键值对
            方式3
                dic.setdefault(key[,default])
                    获取指定key对应的值
                    如果key不存在, 则设置给定默认值, 并返回该值
                    如果默认值没给定
                        则使用None代替
        获取所有的值
            dic.values()
        获取所有的键
            dic.keys()
        获取字典的键值对
            dic.items()
        遍历
            for in
            for x,y in info.items()
        注意
            Python2.x和Python3.x版本之间关于获取键, 获取值, 获取item, 之间的区别
                Python2.x 直接是一个列表
                    可通过下标进行获取指定元素
                Python3.x 中是Dictionary view objects
                    优势
                        当字典发生改变时, view objects会跟着发生改变
                    转换成列表使用
                        list(result)
                    转换成迭代器
                        iter(result)
                    也可以直接被遍历
            在Python2.x中提供了如下方法
                viewkeys()
                viewvalues()
                viewitems()
                作用如同Python3.x中的
                    Dictionary view objects
    计算
        len(info)
            键值对的个数
    判定
        x in dic
            判定dic中的key, 是否存在x
        x not in dic
            判定dic中的key, 是否不存在x
        dic.has_key(key)
            已过期, 建议使用in来代替

2.集合

    概念
        无序的, 不可随机访问的, 不可重复的元素集合
        与数学中集合的概念类似,可对其进行交、并、差、补等逻辑运算
        分为可变集合和非可变集合
            set
                为可变集合
                    增
                    删
                    改
            frozenset
                不可变集合
                    创建好之后, 无法增删改
    定义
        可变集合set
            s = {1,2,3,4}
            s = set(iterable)
                其中iterable可以是字符串、列表、元组、字典等
                但是为dict时,只会获取提Key作为set的元素
            集合推导式
                 s = set(x**2 for x in range(1, 10) if x % 2 == 0)
                s = {推导式}
        不可变集合frozenset
            fs = frozenset(iterable)
                其中iterable可以是字符串、列表、元组、字典等
                但是为dict时,只会获取提Key作为set的元素
            集合推导式
                 s = frozenset(x**2 for x in range(1, 10) if x % 2 == 0)
        注意
            1. 创建一个空集合时, 需要使用set() 或者 frozenset(), 不能使用 s = {}
                会被识别成为字典
            2. 集合中的元素, 必须是可哈希的值
                如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的,
那么它就是可哈希的(hashable)的
            暂时理解为 不可变类型
            3. 如果集合中的元素值出现重复, 则会被合并为1个
    常用操作
        单一集合操作
            可变集合
                增
                    s.add(element)
                    注意:
                        必须保证添加的元素是可哈希的值
                删
                    s.remove(element)
                        指定删除set对象中的一个元素
                        如果集合中没有这个元素,则返回一个错误
                    s.discard(element)
                        指定删除集合中的一个元素
                        若没有这个元素,则do nothing
                    s.pop(element)
                        随机删除并返回一个集合中的元素
                        若集合为空,则返回一个错误
                    s.clear()
                        清空一个集合中的所有元素
                改
                    元素为不可变类型, 不能修改
                查
                    无法通过索引或key进行查询
                    1. 通过 for in 进行遍历
                    2. 通过迭代器进行访问
            不可变集合
                不能增删改
                查
                    1. 通过 for in 进行遍历
                    2. 通过迭代器进行访问
        集合之间操作
            交集
                intersection(Iterable)
                    字符串
                        只判定字符串中的非数字
                    列表
                    元组
                    字典
                        值判定key
                    集合
                    ...
                逻辑与 '&'
                intersection_update(…)
                    交集计算完毕后, 会再次赋值给原对象
                        会更改原对象
                        所以, 只适用于可变集合
            并集
                union()
                    返回并集
                逻辑或 '|'
                    返回并集
                update()
                    更新并集
            差集
                difference()
                算术运算符减 ‘-‘
                difference_update()
            判定
                isdisjoint()两个集合不相交
                issuperset()一个集合包含另一个集合
                issubset()一个集合包含于另一个集合
        注意
            可变与不可变集合混合运算, 返回结果类型以运算符左侧为主

学习地址:

撩课-Python大数据+人工智能1
撩课-Python大数据+人工智能2
撩课-Python大数据+人工智能3
撩课-Python大数据+人工智能4
撩课-Python大数据+人工智能5
撩课-Python大数据+人工智能6
撩课-Python-GUI编程-PyQt5

收藏 0
字典 键值 哈希 dic key 集合
评论 ( 0 )