Python学习笔记(三) 字典

这篇文章将会介绍 Python 中的字典,字典是 Python 唯一的内置映射类型


1、创建字典

字典由多组键值对组成,键可以是任何不可变类型,常见的有字符串和元组,对于值没有特别要求

可以使用字面量 {} 创建字典,字典中用 , 分隔相邻项,用 : 分隔键和值

>>> # 创建一个空字典
>>> person = {}
>>> # 创建带有元素的字典
>>> person = {'name': 'Jessica', 'age': 20}

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

>>> # 传入关键字实参创建字典
>>> worker1 = dict(name = 'Nancy', workerID = 200189)
>>> worker1
# {'name': 'Nancy', 'workerID': 200189}
>>> # 从其他映射类型创建字典
>>> worker2 = dict([('name', 'Tommy'), ('workerID', 201901)])
>>> worker2
# {'name': 'Tommy', 'workerID': 201901}

2、索引元素

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

>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36}
>>> # 若指定的键在字典中存在,则返回对应的值
>>> dic['Apple']
# 15
>>> # 若指定的键在字典中不存在,就会引发错误,导致程序中断
>>> dic['Ant']
# KeyError

也可以用 get() 方法索引,当字典中不包含指定键时,会返回默认值 None 或其他指定值

>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36}
>>> # 参数中没指定返回值,当字典中不包含指定键时,返回默认值 None
>>> dic.get('Ant')
# None
>>> # 参数中有指定返回值,当字典中不包含指定键时,返回指定值
>>> dic.get('Ant', 0)
# 0

还可以用 setdefault() 方法索引,当字典中不包含指定键时,会返回指定值,并在字典中添加该键值对

>>> 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、删除元素

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

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

也可以使用方法 popitem() 删除字典最后一项,返回所删除的项

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

还可以使用方法 clear() 删除所有字典项,这样的操作是就地执行的,不返回任何东西

>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5}
>>> dic.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}

>>> # 迭代字典中的键
>>> 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)

这三种方法返回的都是一种叫做字典视图的类型,它们始终是字典底层的反映

>>> 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)])

6、字典推导

字典推导式与列表推导式类似,可用于快速创建字典,其基本格式如下:

dic = {key_expression(i):value_expression(i) for i in iterable if condition(i)}

翻译成一般语句就是:

dic = {}
for i in iterable:
    if condition(i):
        dic[key_expression(i)] = value_expression(i)
  • 示例 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 = {v:k for k,v in old_dict.items()}
>>> new_dict
{1: 'A', 2: 'B', 3: 'C'}

7、字典排序

可以使用 sorted() 函数给字典排序,它总是返回一个序列

  • 示例 1:按键排序
>>> old = {1: 'E', 5: 'A', 2: 'D', 4: 'B', 3: 'C'}
>>> new = sorted(old.items(), key = lambda x: x[0])
>>> new
# [(1, 'E'), (2, 'D'), (3, 'C'), (4, 'B'), (5, 'A')]
  • 示例 2:按值排序
>>> old = {1: 'E', 5: 'A', 2: 'D', 4: 'B', 3: 'C'}
>>> new = sorted(old.items(), key = lambda x: x[1])
>>> new
# [(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值