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学习笔记

posted @ 2019-01-15 20:37  半虹  阅读(237)  评论(0编辑  收藏  举报