网站logo

Python学习小站



一、创建字典、type函数回顶


    '''
    怎么创建一个字典?考虑下面的基础方法:
    '''
    x = {"吕布":"口口布", "关羽":"关习习"}

    #*  通过大括号,元素:元素,的方式建立一个字典
    #*  冒号左边是键,冒号右边是值,因此冒号,冒号左右的内容统称为一个键值对,
    #*  键和值是一一映射关系
    #*  我们可以通过type函数查看字典类型
    print(type(x))

    #TODO   下面是六种创建字典的方式
    #TODO   大括号冒号类
    a = {"吕布":"口口布", "关羽":"关习习"}  
    #TODO   用dict函数创建一个字典,参数分别指定键与值,用等号配对
    b = dict(吕布="口口布", 关羽="关习习", 刘备="刘又田")   
    #TODO   dict参数是一个列表,列表内的键值对以元组的方式表示,逗号配对键与值
    c = dict([("吕布", "口口布"), ("关羽", "关习习"), ("刘备", "刘又田")])
    #TODO   用将第一种方法作为dict函数的参数,有点鸡肋
    d = dict({"吕布":"口口布", "关羽":"关习习"})
    #TODO   在dict函数内也可以混合使用多种方法,如同时使用大括号冒号类与等号配对类
    e = dict({"吕布":"口口布", "关羽":"关习习"}, 刘备="刘又田")
    #TODO   用zip函数作为dict函数的参数,zip的参数是两个列表,第一个列表是键的内容,第二个列表是值
    f = dict(zip(["吕布", "关羽", "刘备"], ["口口布", "关习习", "刘又田"]))
    #*  我们发现这六种方法等价
    print(a == b == c == e == d == f)
    

二、键值对思想回顶


    #?那么如何找到字典中指定键的值呢?可以通过方括号加键的方式索引之
    print(x["关羽"],x["吕布"])

    #*  可以通过方括号索引进行值的修改,当然,如果指定的键在字典中不存在,
    #*  那么将会在字典中插入这个新的键值对
    x["刘备"] = "刘又田"
    print(x)

    #*前面说了,可以修改字典中的值
    d['S'] = 70
    print(d)
    d['u'] = 67
    print(d)
    

三、fromkeys函数回顶


    #TODO   可以使用dict.fromkeys()方法初始化,fromkeys接收两个参数,
    #TODO   第一个参数是一个可迭代对象,比如字符串,列表,元组,可迭代对象的每一个元素作为字典的键
    #TODO   第二个参数是初始化的值,将字典中的键都赋以相同的指定的值
    d = dict.fromkeys("Study", 250)
    print(d)
    

四、pop函数回顶


    #TODO   可以用.pop()方法进行字典指定键值对的删除,.pop()返回指定键的值,
    #TODO   如下面的打印,将pop方法返回的那个删除键的值打印出来
    print(d.pop('d'))
    d.pop('S')
    print(d)
    #!  d.pop("狗")是不被允许的,这会抛出异常,那么如果不想抛出异常,可以设置default的值
    #!  比如:d.pop("狗", "没有")
    

五、popitem函数回顶


    #*  在python3.7之前,字典是无序的,因此popitem()方法将字典中随机的键值对删除
    #*  但是python3.7之后,字典是有序的,因此popitem()方法默认将字典中最后一次输入的
    #*  键值对删除,下面来演示这个方法
    d.popitem()
    print(d)
    

六、del关键字回顶


    #TODO   回顾一下,del关键字可以将指定内容删除,它同样可以删除指定键值对,甚至是字典
    d = dict.fromkeys("Study", 250)
    del d['y']
    print(d)
    del d
    #!  这时,如果print(d)则会抛出异常,因为此时d字典已经被清除,
    #!  如果只想清除字典中的全部元素,可以考虑下面的方法
    d = dict.fromkeys("Study", 250)
    d.clear()
    print(d)
    

七、update修改键的值回顶


    d = dict.fromkeys("Study")
    print(d)
    d['S'] = 115
    print(d)
    d.update({'t':105, 'u':104})
    d.update(d='70', y='67')
    print(d)
    #TODO   如果想要修改键的值,可以考虑索引方法和update函数
    

八、get方法查询键回顶


    #TODO   想要查找键中的值,可以直接索引寻找
    d = dict.fromkeys("I love Sudy")
    d["S"] = 250
    print(d["S"])

    #*  但是当没有该键时,会报异常,可以考虑get函数,它的第一个参数是寻找的键,
    #*  第二个参数是找不到该键时返回的字符串,参照下面的使用例子
    print(d.get("t", "这里没有t"))
    

九、setdefault方法回顶


    #TODO   如果想在字典中找指定的键,而找到则返回键对应的值,找不到则新建该键,
    #TODO   然后把第二个参数default的值作为新键的值,同时返回该新建值,参考下面的使用例子
    d.setdefault("t", "220")
    print(d["t"])
    print(d.setdefault("M", "9"))
    

十、keys、values、items方法回顶


    #TODO   我们可以设置眼睛,来监视字典中的情况,这就是视图对象
    #TODO   items方法可以返回字典中的键值对的视图对象,keys方法可以返回字典中的键的视图对象
    #TODO   values方法可以返回字典中值的视图对象,参考下面的使用例子
    keys = d.keys()
    values = d.values()
    items = d.items()
    print(items, keys, values)
    

通常用list函数转换为列表以方便显示,打印结果分别如下:
>>> print(list(d.keys()))
>>> ['1', '2']
>>> print(list(d.values()))
>>> [2, 4]
>>> print(list(d.items()))
>>> [('1', 2), ('2', 4)]

十一、字典的拷贝回顶


    #*  字典也可以浅拷贝,可以使用copy函数
    e = d.copy()
    print(e)
    

十二、字典的len函数回顶


    #?  有时候我们想知道这本字典有多少个单词,那么可以考虑使用len函数,
    #*  len函数返回字典中键值对的个数,考虑下面的使用例子
    print(len(d))
    

十三、in与not in关键字回顶


    #?  我们想要知道某个键值对是不是在字典中,就像我们想要知道某个单词和他的注释是否在字典中一样
    #*  我们可以考虑使用in 和not in 关键字,in 和 not in 关键字判断键是否在字典中,
    #*  在则返回True, 不在则返回False,当然,如果键都不在字典中了,值当然也就不存在了
    #*  键和值是同步捆绑的,考虑下面的使用例子
    print("u" in d)
    print("Q" not in d)
    print("t" not in d)
    

十四、list函数将字典转换为列表回顶


    #?  通常我们想抽出字典中所有的键,或者抽取出字典中所有的值,我们怎么做?
    #?  list函数将迭代器转化为列表,如果将list函数作用于字典会怎么样?
    #*  list(d)相当于list(d.keys()),它将字典中的键形成一个列表,
    #*  当然,如果想把值抽取出来形成一个列表,可以考虑list(d.values())
    #*  考虑下面的使用例子
    print(list(d.keys()))
    print(list(d))
    print(list(d.values()))
    

十五、对字典使用next函数回顶


    #?  如果我们想一个个抽取出字典中的键呢?
    #*  回顾一下iter函数,它将得到序列的迭代器,它也可以作用于字典,
    #*  iter函数作用于字典,将得到字典所有键的迭代器,
    #*  然后就可以用next函数抽取迭代器中的一个个键了,考虑下面的使用例子
    e = iter(d)
    print(next(e))
    print(next(e))
    print(next(e))
    print(next(e))
    

十六、对字典排序回顶


    #*  之前我们提到,字典在python3.7之前是无序的,但是现在我们的字典是有序的了,
    #*  既然字典有序,那么我们就可以使用sorted和reversed函数对其进行排序
    d = dict.fromkeys("I love Study", 260)
    d["S"] = 110
    d["I"] = 90
    d[" "] = 20
    d["o"] = 1000
    print(list(reversed(d.values())))
    print(sorted(d.values()))
    print(sorted(d.values(), reverse=True))
    

十七、嵌套字典回顶


    #*  字典的值可以嵌套的,可以嵌套字典,可以嵌套序列
    d = {"吕布":{"语文":60, "数学":70, "英语":90}, "关羽":{"语文":80, "数学":90, "英语":70}}
    print(d)    #TODO   print字典名,则打印整个字典,无论嵌套,这没什么问题
    print(d["吕布"]["数学"])    #TODO   当字典是嵌套字典时,索引字典中的值通常是:字典.[键][键]的形式
    d = {"吕布":[60, 70, 80], "关羽":[80, 90, 70]}  #*  值可以是列表,也可以是字符串,元组
    print(d["吕布"][1]) #*  这时候的索引,通常是:字典.[键][下标]的形式
    print(d["关羽"][2])