zoukankan      html  css  js  c++  java
  • 课时25:字典:当索引不好用时

    目录:

      一 、字典(哈希、关系数组)

      二、创建和访问字典

      三、课时25课后习题及答案

    *********************************

    一 、字典(哈希、关系数组)

    *********************************

    在Python中也有字典,又称为哈希(hash),有些地方称为关系数组。

    字典是Python中唯一的映射类型,映射是数学上的一个术语,指的是两个元素集合之间元素相互“对应”关系,如下图所示:

     

    映射类型区别于序列类型,序列类型一数组的形式存储,通过索引的方式来获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的。举个例子:

    >>> brand = ["李宁","耐克","阿迪达斯","鱼C工作室"]
    >>> slogan = ["一切皆有可能","Just do it","Impossible is nothing","让编程改变世界"]
    >>> print("鱼C工作号的口号是:",slogan[brand.index("鱼C工作室")])
    鱼C工作号的口号是: 让编程改变世界

    列表brand和slogan的索引和相对的值是没有任何关系的,可以看出,唯一有关系的就是两个列表之间,索引号相同的元素是有关系的(品牌对应口号嘛),所以这里通过“brand.index("鱼C工作室")”这样的语句,间接地实现通过品牌查找对应口号的功能。这种方式有点差强人意,所以,需要有字典这种映射类型的出现。

    ***********************

    二、创建和访问字典

    ***********************

     先演示下用法:

    >>> dict1 = {"李宁":"一切皆有可能","耐克":"Just do it","阿迪达斯":"Impossible is nothing","鱼C工作室":"让编程改变世界"}
    >>> dict1
    {'李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing', '鱼C工作室': '让编程改变世界'}
    >>> print("鱼C工作号的口号是:",dict1['鱼C工作室'])
    鱼C工作号的口号是: 让编程改变世界

    字典的使用非常简单,它有自己的标志性符号,就是用大括号( { } )定义。字典由多个键及其对应的值共同构成,每一对键值组合称为项。在刚才的例子中,“李宁”“耐克”“阿迪达斯“”鱼C工作室”这些品牌就是键,而"一切皆有可能","Just do it","Impossible is nothing","让编程改变世界"这些口号就是对应的值。也许细心的你发现了:字典中的项跟创建的顺序不一样的?没错,字典跟序列不同,序列讲究顺序,字典讲究映射,不讲顺序。

    另外,需要注意的是:字典的键必须是独一无二的,而值可以取任何数据类型,但必须是不可变的(如字符串、数或元组)。

    要申明一个空字典,直接用大括号即可:

    >>> empty = {}
    >>> empty
    {}
    >>> type(empty)
    <class 'dict'>

    你也可以用dict()来创建字典:

    >>> dict1 = dict((('F',70),('i',105),('s',115),('h',104),('c',67)))
    >>> dict1
    {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

    为什么会有这么多的括号呢?

    因为dict()函数的参数可以是一个序列(但不能是多个),所以要打包成一个元组序列(列表也可以)。当然,如果嫌上面的做法太麻烦,还可以通过提供具有映射关系的参数来创建字典:

    >>> dict1 = dict(F=70,i=105,s=115,h=104,c=67)
    >>> dict1
    {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

    这里要注意的是键的位置不能加上字符串的引号,否则会报错:

    >>> dict1 = dict('F'=70,'i'=105,'s'=115,'h'=104,'c'=67)
    SyntaxError: keyword can't be an expression

    还有一种创建的方法是直接给字典赋值,如果键存在,则改写键对应的值;如果不存在,则创建一个新的键并赋值:

    >>> dict1
    {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}
    >>> dict1['x'] = 88
    >>> dict1
    {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 88}
    >>> dict1['x'] = 120
    >>> dict1
    {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 120}

    正所谓殊途同归,下面列举的五种方法都是创建同样的字典,我们好好的体会下:

    >>> a = dict(one = 1,two = 2,three = 3)
    >>> b = {'one':1,'two':2,'three':3}
    >>> c = dict(zip(['one','two','three'],[1,2,3]))
    >>> d = dict([('two',2),('one',1),('three',3)])
    >>> e = dict({'three':3,'one':1,'two':2})
    >>> a == b == c == d == e
    True
    >>> a
    {'one': 1, 'two': 2, 'three': 3}
    >>> b
    {'one': 1, 'two': 2, 'three': 3}
    >>> c
    {'one': 1, 'two': 2, 'three': 3}
    >>> d
    {'two': 2, 'one': 1, 'three': 3}
    >>> e
    {'three': 3, 'one': 1, 'two': 2}

    *******************************

    三、课时25课后习题及答案

    *******************************

    爱笑的男孩运气都不会差
  • 相关阅读:
    SPOJ
    hdu1298(字典树)
    hdu1247(字典树)
    hdu1075(字典树)
    Redisson教程
    Redisson官方文档
    Springboot 防止XSS攻击,包含解决RequestBody 的Json 格式参数
    防止XSS脚本注入-前端vue、后端springboot
    在Intellij IDEA中使用Debug
    使用Hibernate-Validator优雅的校验参数
  • 原文地址:https://www.cnblogs.com/DC0307/p/9486571.html
Copyright © 2011-2022 走看看