美文网首页
第二十六课:字典:各种内置方法

第二十六课:字典:各种内置方法

作者: 无罪的坏人 | 来源:发表于2018-07-30 23:40 被阅读0次

    内容来源于网络,本人只是在此稍作整理,如有涉及版权问题,归小甲鱼官方所有。

    练习题(来自小甲鱼官方论坛)

    0. Python的字典是否支持一键(Key)多值(Value)?

    答:不支持,对相同的键再次赋值会将上一次的值直接覆盖。

    >>> dict1 = {1:'one', 1:'yi'}
    >>> dict1[1]
    'yi'
    >>> 
    

    1. 在字典中,如果试图为一个不存在的键(Key)赋值会怎样?

    答:会自动创建对应的键(Key)并添加相应的值(Value)进去。

    >>> dict2 = {1:'one', 2:'two', 3:'three'}
    >>> dict2[4] = 'four'
    >>> dict2
    {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
    >>> 
    

    2. 成员资格操作符(in和not in)可以检查一个元素是否存在序列中,当然也可以用来检查一个键(Key)是否存在字典中,那么请问哪种的检查效率更高些?为什么?

    答:在字典中检查键(Key)是否存在比在序列中检查指定元素是否存在更高效。因为字典的原理是使用哈希算法存储,一步到位,不需要使用查找算法进行匹配,因此时间复杂度是O(1),效率非常高。


    3. Python对键(Key)和值(Value)有没有类型限制?

    答:Python对键的要求相对要严格一些,要求它们必须是可哈希(Hash)的对象,不能是可变类型(包括变量、列表、字典本身等)。但是Python对值是没有任何限制的,它们可以是任意的Python对象。
    如果不清楚哈希原理以及字典的存放原理的童鞋,推荐阅读下小甲鱼帮你整理的这篇文章:你知道Python的字典(Dict)是如何存储的吗?(http://bbs.fishc.com/thread-45016-1-1.html


    4. 请目测下边代码执行后,字典dict1的内容是什么?

    答:执行完成后,字典dict1的内容是:{1: '数字', 3: '数字'},这里要注意的是,fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。

    >>> dict1.fromkeys((1, 2, 3), ('one', 'two', 'three'))
    {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
    >>> dict1.fromkeys((1, 3), '数字')
    {1: '数字', 3: '数字'}
    >>> 
    

    5. 如果你需要将字典dict1 = {1: 'one', 2: 'two', 3: 'three'}拷贝到dict2,你应该怎么做?

    答:可以利用字典的copy()方法:dict2 = dict1.copy(),在其他语言转移到Python小伙伴们刚开始可能会习惯性的直接用赋值的方法(dict2 = dict1),这样子做在Python中只是将对象的引用拷贝过去而已(如笔记中提到的例子)。

    >>> a = {1:'one', 2:'two', 3:'three'}
    >>> b = a.copy()
    >>> c = a
    >>> c[4] = 'four'
    >>> c
    {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
    >>> a
    {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
    >>> b
    {1: 'one', 2: 'two', 3: 'three'}
    >>> 
    

    编程题

    0. 尝试编写一个用户登录程序(这次尝试将功能封装成函数),程序实现如图:

    登录.png
    (图片转载自https://blog.csdn.net/junwei0206/article/details/44956195
    答:
    # -*- coding: UTF-8 -*- 
    def load():
        dict1 = {'小甲鱼':'FishC'}
        while 1:
            key = input('''
    |--- 新建用户:N/n ---|
    |--- 登录帐号:E/e ---|
    |--- 退出程序:Q/q ---|
    |--- 请输入指令代码:''')
            if key == 'N' or key == 'n':
                temp_name = input('请输入用户名:')
                while temp_name in dict1:
                    temp_name = input('此用户名已经被使用,请重新输入:')
     
                temp_password = input('请输入密码:')
                dict1[temp_name] = temp_password
                print('注册成功,赶紧试试登录吧^_^')
                continue
     
            elif key == 'E' or key == 'e':
                temp_name = input('请输入用户名:')
                while temp_name not in dict1:
                    temp_name = input('您输入的用户名不存在,请重新输入:')
                temp_password = input('请输入密码:')
                while temp_password != dict1[temp_name]:
                    temp_password = input('密码错误,请重新输入:')
                print('欢迎进入系统,请点右上角的X结束程序!')
                continue
     
            elif key == 'Q' or key == 'q':
                break
     
     
    load()
    
    

    1.请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

    • dict()是一个工厂函数,调用后会生成该类型的实例
    >>> a = dict()
    >>> type(a)
    <class 'dict'>
    
    • 字典的一种内建方法:dict1.fromkeys(),用于创建并返回一个新的字典
    >>> dict1 = {}
    >>> dict1.fromkeys((1,2,3))
    {1: None, 2: None, 3: None}
    >>> dict2 = {}
    >>> dict2.fromkeys((1,2,3),"Number")
    {1: 'Number', 2: 'Number', 3: 'Number'}
    >>> dict3 = {}
    >>> dict3.fromkeys((1,2,3), ("one","two","three"))
    {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
    
    • 访问字典的方法:
      1)dict1.keys() 返回键
      2) dict1.value() 返回值
      3)dict1.items() 返回键值对(也就是项)
      4)dict1.get() 对应键的值不存在的话返回一个None,这样程序就不会报错
      5)key in dict1 查找的是键,而不是值
      6)dict1.clear() 清空字典,不建议使用直接赋空值的方法:dict1 = {}
      7)dict1.copy():浅拷贝(见练习题5)
      8)dict1.pop():给定键弹出相应值
      9)dict1.popitem():给定键弹出相应项(包括键和值)
      10)dict1.setdefault():找不到给定键对应的值话会自动在字典中创建一个基于该键的项(区别于dict1.get()的结果)
      11)dict1.update():根据一个字典或映射关系去更新另一个字典
    • 收集参数时用**表示将参数们打包成字典的形式。之前介绍过以元组的形式组合,这一课介绍了以字典的形式打包

    相关文章

      网友评论

          本文标题:第二十六课:字典:各种内置方法

          本文链接:https://www.haomeiwen.com/subject/tyoxmftx.html