学习:字典

作者: 小小杨树 | 来源:发表于2021-09-16 13:24 被阅读0次

    转自:http://www.byhy.net/tut/py/basic/17/

    字典的定义

    字典对象定义用花括号 {} , 字典里面的 每个元素之间用 逗号 隔开。

    每个元素都是一个键值对,键和值之间用 冒号 隔开。

    上面例子中,如果每个帐号的信息比较简单,比如只有等级信息,就定义成这样

    members = {
        'account1'  : 13 ,
        'account2'  : 12 
    }
    
    

    上面的字典对象 键就是帐号,值就是一个数字对象,表示等级的数字。

    注意,字典元素的 必须是 可进行哈希值计算 的对象, 通常是 数字 或者 字符串

    而 字典元素的 可以是任何类型的 对象,包括 数字、字符串、列表、元组、字典、自定义类型 等等均可。

    什么是 哈希值计算? 大家可以大体理解为 一种算法,可以根据一个原始数据,计算出一个结果数据,而且不同的原始数据,哪怕只有一丁点的不同,计算出的结果数据都不同。

    上例中,用户账号信息,如果复杂一些,包括 等级、点卡数,可以是这样的

    members = {
        'account1'  : {'account':'account1', 'level': 13, 'point':3000} ,
        'account2'  : {'account':'account2', 'level': 12, 'point':36000} 
    }
    
    

    上面的字典对象 键就是帐号,值也是一个字典对象。 这个值字典对象中又 包含了 帐号、等级、积分信息。


    字典对象的一个特点就是 : 根据 键 去查找 值 非常的方便高效,

    比如 members['account1'] 就可以得到 键为 ‘account1’ 的 元素的值

    members = {
        'account1'  : 13 ,
        'account2'  : 12 
    }
    print(members['account1'])
    
    

    最后一句代码打印出的结果就是 13


    字典对象可以存储非常多的元素。理论上 只要内存够大,字典的元素的数量是没有限制的。

    字典对象 存储元素有特别的优化, 根据 键 查找值的效率非常高,速度非常快,特别适合查找数据这样的操作。


    字典对象的键是唯一的,不可能有两个元素具有相同的键。如果我们这样定义一个字典对象

    members = {
        'account1'  : 13 ,
        'account1'  : 12 
    }
    print(members)
    
    

    就会发现输出的结果是

    {'account1': 12}
    
    

    相同的键,后面的元素会替换前面的元素。


    根据键去获取值,是这样的语法 var[key]

    如果给出的 keyvar 这个字典中不存在就会报错了。

    比如

    members = {
        'account1'  : 13 ,
        'account2'  : 12 
    }
    print(members['account99'])
    
    

    就会出现这样的错误,说明key不存在

    KeyError: 'account99'
    
    

    添加、修改、删除

    点击这里,边看视频讲解,边学习以下内容

    像列表对象一样,字典对象的内容是 可以改变 的。

    我们可以这样定义一个空字典

    members = {}
    
    

    要在字典对象中添加元素非常简单,像这样

    members['account1'] = 13
    
    

    members 的内容就变成了

    {
        'account1'  : 13 
    }
    
    

    继续添加元素

    members['account2'] = 12
    
    

    members 的内容就变成了

    {
        'account1'  : 13 ,
        'account2'  : 12 
    }
    
    

    如果我们要修改一个元素key对应的value为另外的值,也是这样

    members['account2'] = 88
    
    

    members 的内容就变成了

    {
        'account1'  : 13 ,
        'account2'  : 88 
    }
    
    

    大家可以发现:

    像这样的赋值语句

    var[key] = something
    
    

    括号里面的key:

    • 如果在字典中不存在,就是添加元素的的操作,

    • 如果已经存在,就是重新赋值操作。 因为字典不允许有相同的key


    如果我们要删除一个元素,可以使用字典对象的pop方法。 像这样

    members = {
        'account1'  : 13 ,
        'account2'  : 12 
    }
    
    val = members.pop('account1')
    print(members)
    print(val)
    
    

    pop方法还会返回参数 key 对应的 value 对象,所以上面的代码执行后,变量val 的值就是 13

    而members 的内容则变成了

    members = {
        'account2'  : 12 
    }
    
    

    也可以使用 del 关键字来删除一个元素,比如

    del members['account1']
    
    

    判断字典是否存在某个key

    有时候,我们要检查字典的key中,是否有我们要找的元素,可以通过 in 这个关键字 ,比如

    a in var   # 检查 a 是否在var 中存在,存在返回True,否则返回False
    
    

    而 not in 则判断是否不存在,比如

    a not in var   # 检查 a 是否不在var 中,存在返回 False,否则返回 True
    
    

    具体的例子如下:

    members = {
        'account1'  : 13 ,
        'account2'  : 12 
    }
    
    if 'account1' in members:
        print('account1 在字典中存在')
    
    if 'account88' not in members:
        print('account88 不在字典中')
    
    

    访问字典的所有元素

    点击这里,边看视频讲解,边学习以下内容

    我们有时需要访问字典的每一个元素,也叫遍历字典。

    比如,我们需要打印出下面 会员信息字典 中的 每个会员的等级。怎么办?

    通常我们使用字典对象的items方法,像这样:

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    for account,level in members.items():
        print (f'account:{account}, level:{level}')
    
    

    items方法,返回的是一个类似列表一样的对象,其中每个元素就是 键值组成的元组

    上面的字典,其items方法返回的是类似这样的对象

    [('account1', 13), ('account2', 12), ('account3', 15)]
    
    

    用for 循环, account level 两个变量就依次对应其中的每个元组里面的 两个元素,完成遍历。

    其他常用方法

    得到所有的 key 和value 对象

    前面我们介绍了 items 方法, 返回的是 将字典 所有的 键值对元组 存入的 一个类似列表的对象

    比如:

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    members.items()
    
    

    返回的是类似这样的对象

    [('account1', 13), ('account2', 12), ('account3', 15)]
    
    

    而字典还有 keys 方法, 返回的是 将字典 所有的 存入的 一个类似列表的对象

    比如:

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    members.keys()
    
    

    返回的是类似这样的对象

    ['account1', 'account2', 'account3']
    
    

    而字典还有 values 方法, 返回的是 将字典 所有的 存入的 一个类似列表的对象

    比如:

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    members.values()
    
    

    返回的是类似这样的对象

    [13, 12, 15]
    
    

    清空字典

    clear 方法可以清空字典对象里面的所有元素

    比如

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    members.clear()
    
    print(members)
    
    

    可能有的朋友就想,我们给字典对象重新赋值不也就等于清空字典吗?

    比如

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    members = {}
    
    print(members)
    
    

    这两种做法,虽然最后 members 变量指向的对象 都是一个空字典。 但是最大的区别就在于

    clear方法, members 变量 指向的还是原来的字典对象。

    而 重新赋值的方法, members 变量 指向的 就是一个新的空字典对象。 原来的字典对象呢? 因为没有被引用,就会被Python解释器在合适的时候 从内存中清除掉。

    和另外一个字典合并

    有的时候,我们需要把字典里面加上另外一个字典的内容, 可以使用update方法,比如

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    another =  {
        'account4'  : 13 ,
        'account5'  : 12 ,
    }
    
    members.update(another)
    
    print(members)
    
    

    这样,就在 members字典里面加上了 another字典里面的所有元素。

    得到字典元素的个数

    如果需要得到字典元素的个数,就使用Python的内置函数 len 即可

    比如

    members = {
        'account1'  : 13 ,
        'account2'  : 12 ,
        'account3'  : 15 ,
    }
    
    print(len(members)) # 结果为3,表示字典中有3个元素
    

    相关文章

      网友评论

        本文标题:学习:字典

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