查看: 94|回复: 0

ESP32 / ESP8266 MicroPython教程:如何使用字典

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-5-13 17:56 | 显示全部楼层 |阅读模式


    介绍

    本MicroPython教程的目的是解释如何在MicroPython 中使用字典。当然,我们在这里看到的功能也适用于Python,因为字典是Python的基本数据结构之一。
    请注意,这应该是一个关于MicroPython使用字典的介绍性教程。因此,我们将不讨论进一步的功能。
    这些测试是使用MicroPython IDE uPyCraft执行的(https://dfrobot.gitbooks.io/upycraft/content/)。遵循本教程最简单的方法是在MicroPython命令行中发送命令。你可以在上一篇文章中查看如何在uPyCraft上使用它:ESP32 MicroPython教程:uPyCraft IDE入门
    本教程在 esp32 和 esp8266 上进行了测试。在 esp32 上的测试是使用 DFRobot 的esp-wroom-32设备集成在FireBeetle ESP32开发板上进行的。

    创建字典

    创建字典的语法非常简单,只需将key-value(键-值对)按顺序填在花括号中即可,每个key-value之间用逗号分隔。Key(键)与value(值)之间用冒号分隔。

    kittenblock中小学创客名师推荐的图形化编程软件

    1 Dictionary = {key1:value1, key2:value2, ...}


    在以下的字典声明中,key(键)和value(值)均为字符串。

    kittenblock中小学创客名师推荐的图形化编程软件

    testDictionary = {"key1": "value1", "key2": "value2"}
    print(testDictionary)     
      


    若要声明一个空的字典,则空置花括号即可。

    kittenblock中小学创客名师推荐的图形化编程软件

       emptyDictionary = {}
    print(emptyDictionary)
    



    图1显示了这些命令的运行结果。


    图1 - 创建字典命令的输出结果


    请注意,虽然我们使用字符串作为key,但实际上我们可以使用任何可散列的数据类型,资料:https://docs.python.org/3/glossary.html#term-hashable,并且支持等式比较[1]。点击此处(https://wiki.python.org/moin/DictionaryKeys了解更多关于这方面的信息。此外,字典的value(值)可以是任何类型数据[2]。



    访问元素
    若要访问字典中的元素,我们只需在方括号中写入待访问数据的key(键)即可获得对应的value(值)。注意,这个语法类似于list列表的语法,尽管现在我们的key并不是数字,资料:ESP32 / ESP8266 MicroPython教程:如何使用List列表
    注意,在以下示例中,我们创建了一个含有不同类型对象的字典,准确地说,是一个含有整数、字符串和列表的字典。这种数据是有效的,代码运行结果如下所示。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    testDictionary = {"key1": 1, "key2": "value2", "key3" : [1,2,3]}
    print(testDictionary["key1"])
    print(testDictionary["key2"])
    print(testDictionary["key3"])   



         
    当然,如果我们试图访问一个字典中并不存在的key,那么将会产生一个错误。


    图2显示了这些命令的输出结果。注意,当key不存在时,发生了错误。


    图2 - 访问字典的元素

    对字典对象调用get方法并将key作为其输入参数是另一种访问字典元素的方式。如果key存在,那么它将返回key对应的value。如果key不存在,这种调用将返回一个默认值,用户可选择将这个默认值作为get方法的第二参数。如果未指定第二参数的默认值,那么在未发现key的情况下,将返回“None”。


    kittenblock中小学创客名师推荐的图形化编程软件

    myDictionary = {"key1": "value1", "key2":"value2", "key3": "value3"}
    val = myDictionary.get("key1")
    print(val)
    val = myDictionary.get("nonExistingKey")
    print(val)
    val = myDictionary.get("nonExistingKey", "the item was not found")
    
    print(val)   
         

    图3显示了调用get方法的结果。请注意,如果key不存在,并且我们没有给get方法赋予其它值,那么如前所述,它将返回“None”。另外,当未发现key时,我们也可以按照自己的意愿给返回值赋予一个值,在这个示例中,返回了“the item was not found”字符串,而不是返回“None”。



    图3 - 使用get方法获取字典内的value(值)


    注意,我们也可以使用操作符检验一个key(键)是否存在于字典之中,如下所示。但无论怎样,它都不能用于检验一个value(值)是否存在于字典之中[3]。

    kittenblock中小学创客名师推荐的图形化编程软件

    myDictionary = {"key1": "value1", "key2":"value2", "key3": "value3"}
    "key1" in myDictionary
    "value1" in myDictionary


    图4显示了使用“in”操作符判断key或value是否存在于字典之中的运行结果。


    图4 - 对字典使用“in”操作符

    若要获取一个字典的所有key,我们可以调用keys方法。它将返回一个包含字典所有key的对象。同样,我们也可以通过调用values方法获取一个包含字典所有value的对象。对于由字典的key-value(键-值对)组成的元组对象,我么只需简单地调用items方法即可。
    注意,在第3种状况下,我们说“对象”而非“列表“是因为这些方法实际上返回的是dict_view类型的对象,它提供了反应字典变化的动态视图[4]。我们可以把这些方法的返回对象作为type函数的输入参数,从而验证这些返回对象的数据类型。
    然而,在Python中转换这些对象的类型非常简单,只需调用list函数并将以上所提的对象作为其输入参数即可。



    kittenblock中小学创客名师推荐的图形化编程软件

            myDictionary = {"key1": "value1", "key2":"value2", "key3": "value3"}
    keys = myDictionary.keys()
    print(type(keys))
    print(list(keys))
    values = myDictionary.values()
    print(type(values))
    print(list(values))
    items = myDictionary.items()
    print(type(items))
    print(list(items))       
    

    若要获取字典中元素的数量,我们只需简单地调用len函数并将此字典作为其输入参数即可。



    图5显示了这些命令的运行结果。
    图5 - 调用各种字典方法的输出结果


    更新和添加元素
    向字典更新和添加元素是相同的操作。一般而言,我们在方括号中写入待添加/修改的key以及对应的value。如果key不存在,那么这个key及对应的value将被添加到字典中。如果key存在,那么它对应的value将被更新。

    kittenblock中小学创客名师推荐的图形化编程软件

            emptyDictionary = {}
    emptyDictionary["key1"] = "value1"
    print(emptyDictionary)
    emptyDictionary["key1"] = "updatedValue1"
    print(emptyDictionary)


    如果想将一个字典的key-value(键-值对)添加到另外一个字典中,我们只需调用一个字典的update方法并将另一个字典作为其输入参数即可。

    kittenblock中小学创客名师推荐的图形化编程软件

    
            dictionaryToAdd = {"key2":"value2"}
    emptyDictionary.update(dictionaryToAdd)
    print(emptyDictionary)



    图6显示了这些命令的运行结果。


    图6 - 添加元素和更新MicroPython字典

    现在我们已经知道如何更新字典,接下来我们将确认上一节中的一个说法,即dict_view对象应保持字典的最新状态。为了测试这个说法,我们将创建一个字典,调用keys方法并打印结果,然后将另一个key添加到字典中,然后再次打印先前获得的对象。

    kittenblock中小学创客名师推荐的图形化编程软件

            myDictionary = {"key1": "value1", "key2":"value2", "key3": "value3"}
    keys = myDictionary.keys()
    print(keys)
    myDictionary["newKey"] = "newValue"
    print(keys)      
      
    如图7所示,dict_view对象已经更新了字典中新添加的key。


    图7 - 根据字典的更新状况测试dict_view对象的反应。
    删除元素
    若要将一个元素从字典中删除,我们只需简单地使用del操作符并通过key访问待删除元素即可。如果我们想删除整个字典,我们只需对字典使用del操作符即可(无需访问具体的元素)。

    kittenblock中小学创客名师推荐的图形化编程软件

            myDictionary = {"key1": "value1", "key2":"value2", "key3": "value3"}
    del myDictionary["key1"]
    print(myDictionary)
    del myDictionary
    print(myDictionary)

    若要删除字典的所有元素,但不删除此字典,我们可以调用clear方法。它可以删除所有key-value(键-值对),清空此字典。


    kittenblock中小学创客名师推荐的图形化编程软件

            myDictionary = {"key1": "value1", "key2":"value2", "key3": "value3"}
    myDictionary.clear()
    print(myDictionary)




    图8显示了各种字典删除命令的运行结果


    图8 - 字典删除命令


    注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
    他写了很多有关ESP32、ESP8266的有用的教程和项目。

    查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴
    英文版教程 ESP32 tutorial



    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    请问一下微动开关 4X4矩阵键盘 16按键  怎么接ardiuno的 接口?
    请问一下微动开关 4X4矩阵
    请问下这款微动开关 4X4矩阵键盘 16按键的 8个接口分别接单片机的什么口,我
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Nano 一直显示上传,不显示上传成功。
    Nano 一直显示上传,不显
    前面用的还好好的,突然就传不上程序了。一直停留在上传状态中,就是不限显示上传成功
    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    Arduino板接74HC拓展接驱动器接多个四项电机
    Arduino板接74HC拓展接驱
    一个Arduino板能不能接多个74HC595来得到多个拓展? 如果能的话要怎么接啊? 如果接
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表