• python dict 字典详解


    和列表相同,字典也是许多数据的集合,属于可变序列类型。不同之处在于,它是无序的可变序列,其保存的内容是以“键值对”的形式存放的。

    字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。

    字典类型很像学生时代常用的新华字典。我们知道,通过新华字典中的音节表,可以快速找到想要查找的汉字。其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值。

    表 1 Python 字典特征
    主要特征解释
    通过键而不是通过索引来读取元素 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
    字典是任意数据类型的无序集合 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素。而字典中的元素是无序的。
    字典是可变的,并且可以任意嵌套 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
    字典中的键必须唯一 字典中,不支持同一个键出现多次,否则,只会保留最后一个键值对。
    字典中的键必须不可变 字典中的值是不可变的,只能使用数字、字符串或者元组,不能使用列表。

    Python 中的字典类型相当于 Java 或者 C++ 中的 Map 对象。

     

    1) 花括号语法创建字典

    于字典中每个元素都包含 2 部分,分别是键和值,因此在创建字典时,键和值之间使用冒号分隔,相邻元素之间使用逗号分隔,所有元素放在大括号 {} 中。

    Python 字典类型的语法格式如下:

    key: valuen 表示各个元素的键值对。需要注意的是,同一字典中各个元素的键值必须唯一。

    dictname = {'key':'value1','key2':'value2',...,'keyn':valuen}
    [root@kube dict]# cat demo.py 
    #coding:utf-8
    
    scores = {'语文':89,'数学':100,'化学':90}
    print(type(scores))
    a_scores = {'语文':89,'数学':(44,55),'化学':[90,66]}          #key 键不能是列表会报错
    print(a_scores)
    
    
    [root@kube dict]# py demo.py 
    <class 'dict'>
    {'语文': 89, '数学': (44, 55), '化学': [90, 66]}
    [root@kube dict]# 

    2) 通过 fromkeys() 方法创建字典

    Python 中,还可以使用 dict 字典类型提供的 fromkeys() 方法创建所有键值为空的字典,使用此方法的语法格式为:

    dictname = dict.fromkeys(list,value=None)
    [root@kube dict]# cat demo1.py 
    s_name = {'语文','数学','英语'}
    scores = dict.fromkeys(s_name)
    print(type(scores))
    print(scores)
    [root@kube dict]# py demo1.py 
    <class 'dict'>
    {'数学': None, '英语': None, '语文': None}
    [root@kube dict]#

    3) 通过 dict() 映射函数创建字典

    通过 dict() 函数创建字典的写法有多种,表 2 罗列出了常用的几种方式,它们创建的都是同一个字典 a。

    表 2 dict() 函数创建字典
    创建格式注意事项
    >>> a = dict(one=1,two=2,three=3) 注意,其中的 one、two、three 都是字符串,但使用此方式创建字典时,字符串不能带引号。
    >>> demo = [('two',2),('one',1),('three',3)] #方式1
    >>> demo = [['two',2],['one',1],['three',3]] #方式2
    >>> demo = (('two',2),('one',1),('three',3)) #方式3
    >>> demo = (['two',2],['one',1],['three',3]) #方式4
    >>> a = dict(demo)
    向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
    >>> demokeys = ['one','two','three'] #还可以是字符串或元组
    >>> demovalues = [1,2,3] #还可以是字符串或元组
    >>> a = dict(zip(demokeys,demovalues))
    通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。

    注意,无论采用以上哪种方式创建字典,字典中各元素的键都只能是字符串、元组或数字,不能是列表。

    python 访问字典

    和列表、元组不同,它们访问元素都是通过下标,而字典不同,它是通过键来访问对应的元素值。

    因为字典中元素是无序的,所以不能像列表、元组那样,采用切片的方式一次性访问多个元素。

    Python 更推荐使用 dict 类型提供的 get() 方法获取指定键的值。get() 方法的语法格式为:

    dict.get(key[,default])
    [root@kube dict]# cat demo1.py 
    scores = {'语文':60,'数学':70,'英语':80}
    print(scores.get('语文'))
    print(scores.get('英语'))     #通过get 函数获取值
    del scores                   #del 删除字典
    print(scores)
    
    [root@kube dict]# py demo1.py 
    60
    80
    Traceback (most recent call last):
      File "demo1.py", line 5, in <module>
        print(scores)
    NameError: name 'scores' is not defined
    [root@kube dict]# 

    python  dict 字典基本操作

    由于字典属于可变序列,所以我们可以任意操作字典中的键值对(key-value 对)。Python 中,常见的字典操作有以下几种:

      1. 向现有字典中添加新的键值对。
      2. 修改现有字典中的键值对。
      3. 从现有字典中删除指定的键值对。
      4. 判断现有字典中是否存在指定的键值对。

    Python字典添加键值对

    如果要为 dict 添加键值对,只需为不存在的 key 赋值即可。实现此操作的语法格式如下:
    dict[key] = value 
    表 1 Python 字典添加键值对语法参数
    参数含义
    dict 表示字典名称。
    key 表示要添加元素的键。注意,既然是添加新的元素,那么就要保证此元素的键和字典中现有元素的键互不相同。
    value 表示要添加数据的值,只要是 Python 支持的数据类型就可以。

    [root@kube dict]# cat demo2.py 
    a = dict()             #用 duict 函数定义一个空的字典
    print(a)
    print(type(a))          
    a['语文'] = 100          #定义字典中的 key  值并给定 value ,相当于字典添加键值对
    a['数学'] = 80
    a['地理'] = 90
    print(a)
    a['语文'] = 88888         #给 相同key  重新赋值相当于修改 key 的value 
    print(a)
    del a['地理']              #删除对应的 key  ,同时也删除 key  对应的 value
    print(a)
    
    [root@kube dict]# py demo2.py 
    {}
    <class 'dict'>
    {'语文': 100, '数学': 80, '地理': 90}
    {'语文': 88888, '数学': 80, '地理': 90}
    {'语文': 88888, '数学': 80}
    [root@kube dict]# 

    python 字典dict 完全攻略

    字典的数据类型为 dict,我们可使用 dir(dict) 来查看该类包含哪些方法

    >>> dir(dict)
    ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
    >>> 

    python keys() ,values() ,items() 函数

    这 3 个方法之所以放在一起介绍,是因为它们都用来获取字典中的特定数据。keys() 方法用于返回字典中的所有键;values() 方法用于返回字典中所有键对应的值;items() 用于返回字典中所有的键值对。

    [root@kube dict]# cat demo3.py 
    scores = {'语文':60,'数学':70,'英语':80}
    
    print(scores.keys())
    print(scores.values())
    print(scores.items())
    [root@kube dict]# py demo3.py 
    dict_keys(['语文', '数学', '英语'])
    dict_values([60, 70, 80])
    dict_items([('语文', 60), ('数学', 70), ('英语', 80)])
    [root@kube dict]# 
    [root@kube dict]# 
    [root@kube dict]# cat  demo4.py 
    a = {'数学': 95, '语文': 89, '英语': 90}
    for k in a.keys():
        print(k,end=' ')
    print("
    ---------------")
    for v in a.values():
        print(v,end=' ')
    print("
    ---------------")
    for k,v in a.items():
        print("key:",k," value:",v)
    [root@kube dict]# py demo4.py 
    数学 语文 英语 
    ---------------
    95 89 90 
    ---------------
    key: 数学  value: 95
    key: 语文  value: 89
    key: 英语  value: 90
    [root@kube dict]# 

    python  copy 方法

    copy() 方法用于返回一个具有相同键值对的新字典

    [root@kube dict]# cat demo5.py 
    a = {'one':1,'two':2,'three':[3,2,1]}
    b = a.copy()
    print(b)
    [root@kube dict]# py demo5.py 
    {'one': 1, 'two': 2, 'three': [3, 2, 1]}
    [root@kube dict]# 
    注意,copy() 方法所遵循的拷贝原理,既有深拷贝,也有浅拷贝。拿拷贝字典 a 为例,copy() 方法只会对最表层的键值对进行深拷贝,也就是说,它会再申请一块内存用来存放 {'one': 1, 'two': 2, 'three': []};而对于某些列表类型的值来说,此方法对其做的是浅拷贝,也就是说,b 中的 [1,2,3] 的值不是自己独有,而是和 a 共有。

    python update 方法

    update() 方法可使用一个字典所包含的键值对来更新己有的字典。

    在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去。

    [root@kube dict]# cat demo6.py 
    a = {'one':1,'two':2}
    a.update({'one':5.5,'three':3.3})
    print(a)
    [root@kube dict]# py demo6.py 
    {'one': 5.5, 'two': 2, 'three': 3.3}
    [root@kube dict]# 

    python pop() 方法

    [root@kube dict]# cat demo7.py 
    a = {'one': 1, 'two': 2, 'three': 3}
    print(a.pop('one'))
    print(a)
    [root@kube dict]# py demo7.py 
    1
    {'two': 2, 'three': 3}
    [root@kube dict]# 

    python popitem() 方法

    popitem() 方法用于随机弹出字典中的一个键值对。

    注意,此处的随机其实是假的,它和 list.pop() 方法一样,也是弹出字典中最后一个键值对。但由于字典存储键值对的顺序是不可知的,因此 popitem() 方法总是弹出底层存储的最后一个键值对。

    [root@kube dict]# cat demo7.py 
    a = {'one': 1, 'two': 2, 'three': 3}
    print(a.popitem())
    print(a)
    print(a.popitem())
    print(a)
    [root@kube dict]# py demo7.py 
    ('three', 3)
    {'one': 1, 'two': 2}
    ('two', 2)
    {'one': 1}
    [root@kube dict]# 

    python setdefault() 方法

    setdefault() 方法也用于根据 key 来获取对应 value 的值。但该方法有一个额外的功能,即当程序要获取的 key 在字典中不存在时,该方法会先为这个不存在的 key 设置一个默认的 value,然后再返回该 key 对应的 value。

    也就是说,setdefault() 方法总能返回指定 key 对应的 value;如果该键值对存在,则直接返回该 key 对应的 value;如果该键值对不存在,则先为该 key 设置默认的 value,然后再返回该 key 对应的 value。

    [root@kube dict]# cat demo7.py 
    a = {'one': 1, 'two': 2, 'three': 3}
    print(a.setdefault('four'))                 #添加four 不存在的键,value默认 None
    print(a)
    print(a.setdefault('five',2.3))              #添加不存在的键值对,会添加
    print(a)
    print(a.setdefault('one',5.5))                #添加已存在的键值,不会添加
    print(a)
    
    
    [root@kube dict]# py demo7.py 
    None
    {'one': 1, 'two': 2, 'three': 3, 'four': None}
    2.3
    {'one': 1, 'two': 2, 'three': 3, 'four': None, 'five': 2.3}
    1
    {'one': 1, 'two': 2, 'three': 3, 'four': None, 'five': 2.3}
    [root@kube dict]# 

    python 使用字典格式化字符串

    格式化字符串时,如果要格式化的字符串模板中包含多个变量,后面就需要按顺序给出多个变量,这种方式对于字符串模板中包含少量变量的情形是合适的,但如果字符串模板中包含大量变量,这种按顺序提供变量的方式则有些不合适。

    这时,就可以使用字典对字符串进行格式化输出,具体方法是:在字符串模板中按 key 指定变量,然后通过字典为字符串模板中的 key 设置值。

    [root@kube dict]# cat demo8.py 
    #coding:utf-8
    #定义字符串模板的转化说明符
    
    temp = '姓名:%(name)s,年龄:%(age)3.0f,籍贯:%(location)s'
    
    msg = {'name': 'JoJ','age':23,'location':'海拉尔群岛'}
    print(temp % msg)
    [root@kube dict]# py demo8.py 
    姓名:JoJ,年龄: 23,籍贯:海拉尔群岛
    [root@kube dict]# 
  • 相关阅读:
    如何编写一个shellcode
    SQL_MODE设置讲解
    centOS7 安装man中文手册
    CentOS Docker 安装
    windows下php的各个版本下载地址
    cnetos7最小化安装ifconfig命令找不到怎么办
    Linux netstat命令详解
    Linux查看磁盘占用率及文件大小
    Linux下ps命令详解 Linux下ps命令的详细使用方法
    支付接口中常用的加密解密以及验签rsa,md5,sha
  • 原文地址:https://www.cnblogs.com/zy09/p/11597909.html
Copyright © 2020-2023  润新知