zoukankan      html  css  js  c++  java
  • Python学习笔记(三) 字典

    字典是 Python 中唯一的内置映射类型,由键及其相应的值组成,这种键-值对也称为项

    1、创建字典

    字典的特征符号是 {},可以使用 {} 创建字典,字典的键可以是任何不可变类型,常见的有 字符串元组

    >>> # 创建空字典
    >>> dic = {}
    >>> # 创建带有元素的字典,用 : 分隔键和值,用 , 分隔相邻项
    >>> person = {'name':'Jessica', 'age':20}
    

    也可以使用内置函数 dict() 创建字典,其参数可以是关键字实参,也可以是其他映射类型

    >>> # 使用关键字实参调用函数创建字典
    >>> worker = dict( name='Nancy', workerID=200189 )
    >>> worker
    # {'name': 'Nancy', 'workerID': 200189}
    >>> # 从其他映射类型创建字典
    >>> student = [('name','Tommy'),('studentID',201901)]
    >>> student = dict(student)
    >>> student
    # {'name': 'Tommy', 'studentID': 201901}
    

    2、索引元素

    字典的索引是通过键索引值的,使用格式为 dict['KEY']

    >>> dic = {'Apple':15, 'Banana':24, 'Carrot':36}
    >>> dic['Banana']
    # 24
    

    也可以使用方法 get() 进行索引,一般而言,当直接访问字典中不存在的键时,会引发错误

    而使用 get() 方法访问不存在的键时,并不引发异常,而是默认返回 None

    >>> dic = {'Apple':15, 'Banana':24, 'Carrot':36}
    >>> dic['Ant']
    # KeyError
    >>> dic.get('Ant')
    # 返回 None
    >>> dic.get('Ant','N/A') # 也可以指定当键不存在时返回的值
    # 'N/A'
    

    也可以使用方法 setdefault() 获取指定键相关联的值

    但是,当字典中不包含指定键时,则在字典中添加指定的键值对,使用格式为 dict.setdefault(key,default_value)

    >>> dic = {'Apple':15, 'Banana':24, 'Carrot':36}
    >>> dic.setdefault('Apple',49)
    # 15
    >>> dic.setdefault('Ant',49)
    # 49
    >>> dic
    # {'Apple': 15, 'Banana': 24, 'Carrot': 36, 'Ant': 49}
    

    3、删除元素

    可以使用通用函数 del() 删除元素,使用格式为 del dict[KEY]

    >>> dic = {'Apple':15, 'Banana':24, 'Carrot':36}
    >>> del dic['Apple']
    >>> dic
    # {'Banana': 24, 'Carrot': 36}
    

    可以使用方法 pop() 删除字典指定项,返回指定键所对应的值

    可以使用方法 popitem() 随机删除字典任意项,返回所删除的项

    >>> dic = {'A':1 , 'B':2 , 'C':3 , 'D':4 , 'E':5}
    >>> dic.pop('C')
    # 3
    >>> dic.popitem()
    # ('E', 5)
    

    也可以使用方法 clear() 删除所有字典项,这样的操作是就地执行的

    4、添加元素

    字典添加元素的方法有点特别,它可以通过直接赋值添加元素,这也是字典和序列之间一个很大的不同

    >>> # 列表
    >>> li = ['Apple', 'Banana', 'Carrot']
    >>> li[0] = 'Ant' # 可行,列表中的第一项变成 'Ant'
    >>> li[3] = 'Dog' # 不可行
    # IndexError: list assignment index out of range
    >>> # 字典
    >>> dic = {'Apple':15, 'Banana':24, 'Carrot':36}
    >>> dic['Apple'] = 30 # 可行,字典中键 'Apple' 对应的值变成 30
    >>> dic['Dog'] = 40 # 可行,字典中新添加一项,键为 'Dog',对应的值为 40
    

    另外,方法 update() 允许使用一个字典中的项更新另一个字典,如果当前字典包含键相同的项,则替换它

    >>> dic1 = {'A':1 , 'B':2}
    >>> dic2 = {'B':3 , 'D':4}
    >>> dic1.update(dic2)
    >>> dic1
    # {'A': 1, 'B': 3, 'D': 4}
    

    5、字典迭代

    前置知识:

    • keys() 函数:返回字典中所有键
    • values() 函数:返回字典中所有值
    • items() 函数:返回字典中所有项

    所有返回值都是一种叫做 字典视图 的类型,它们始终是字典底层的反映

    >>> dic = {'A':1, 'B':2, 'C':3}
    >>> items = dic.items()
    >>> items
    # dict_items([('A', 1), ('B', 2), ('C', 3)])
    >>> dic['A'] = 3
    >>> items
    # dict_items([('A', 3), ('B', 2), ('C', 3)])
    

    实际演示:

    >>> dic = {'A':1, 'B':2, 'C':3}
    >>> # 迭代字典中的键
    >>> for key in dic.keys():
        	print(key)
    # A
    # B
    # C
    >>> # 迭代字典中的值
    >>> for value in dic.values():
        	print(value)
    # 1
    # 2
    # 3
    >>> # 迭代字典中的项
    >>> for item in dic.items():
        	print(item)
    # ('A', 1)
    # ('B', 2)
    # ('C', 3)
    

    6、字典推导式

    字典推导式与列表推导式类似,可用于快速创建字典

    示例1:给出字符串列表,以字符串作为键、以字符串长度作为值建立字典

    >>> li = ['I','Love','Python']
    >>> dic = {i:len(i) for i in li}
    >>> dic
    # {'I': 1, 'Love': 4, 'Python': 6}
    

    示例2:给出原始字典,将键和值交换位置建立新的字典

    >>> old_dict = {'A':1,'B':2,'C':3}
    >>> new_dict = {k:v for v,k in old_dict.items()}
    >>> new_dict
    {1: 'A', 2: 'B', 3: 'C'}
    

    7、字典排序

    可以使用 sorted() 函数给字典排序

    • 按键排序
    >>> old = {1:'E', 5:'A', 2:'D', 4:'B', 3:'C'}
    >>> new = sorted(old.items(), key=lambda old:old[0])
    >>> new
    # [(1, 'E'), (2, 'D'), (3, 'C'), (4, 'B'), (5, 'A')]
    
    • 按值排序
    >>> old = {'A':5, 'E':1, 'B':4, 'D':2, 'C':3}
    >>> new = sorted(old.items(), key=lambda old:old[1])
    >>> new
    # [('E', 1), ('D', 2), ('C', 3), ('B', 4), ('A', 5)]
    

    【 阅读更多 Python 系列文章,请看 Python学习笔记

    版权声明:本博客属于个人维护博客,未经博主允许不得转载其中文章。
  • 相关阅读:
    encodeURIComponent编码时为什么要编码两次
    JS校验身份证号的合法性
    react-router与react-router-dom使用时的区别
    数组去重
    window的cmd命令行下新增/删除文件夹及文件
    数组排序【冒泡排序、快速排序、选择排序】
    个人搭建后台管理模板 Bootstrap4 ,ASP.NET Core,EF Core,JWT
    个人搭建后台管理模板 Bootstrap4 ,ASP.NET Core,EF Core,JWT
    react-starter-projects
    基于H.ui.Admin UI模板的网站管理后台
  • 原文地址:https://www.cnblogs.com/wsmrzx/p/10274166.html
Copyright © 2011-2022 走看看