Python3 字典(下)

Python3 字典(上)继续讲解以下内容:

  1. python字典常用操作之增加
  2. python字典常用操作之删除
  3. python字典常用操作之修改
  4. python字典常用操作之查找
  5. python字典的循环遍历之key
  6. python字典的循环遍历之value
  7. python字典的循环遍历之键值对
  8. python字典的循环遍历之键值对(拆包)

1、python字典常用操作之增加

语法:字典序列[key] = 值

注意:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
dict1['name'] ='xinbiancheng.cn'
print(dict1)
#在Python中运行显示的结果:{'name': 'xinbiancheng.cn', 'age': 20, 'gender': '男'}
#我们发现David换成了xinbiancheng.cn,这就说明了键key存在就是进行该

#接下来我们在python中做一下字典中键不存在的情况
dict1['id'] =666666
print(dict1)
#显示结果 {'name': 'xinbiancheng.cn', 'age': 20, 'gender': '男', 'id': 666666}
#我们发现多了一个键值对 'id': 666666
#得出的结论是:如果key不存在则新增此键值对

2、python字典常用操作之删除

del()/del:删除字典或者字典中指定键值对

2.1 删除字典变量,实例如下:

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
del(dict1)
print(dict1)

以上字典的实例显示如下:

Traceback (most recent call last):
  File "G:/xinbiancheng.cn/article/article/article/test.py", line 45, in <module>
    print(dict1)
NameError: name 'dict1' is not defined

以上显示信息说明 dict1这个字典变量已经被删除了,因为不存在啦,所以后面再次调用就会报错

2.2 如何在字典中删除键值对呢?

如果键存在则可以删除这个键值对,如果不存在则会报错

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
del(dict1['name'])
print(dict1)
#显示结果:{'age': 20, 'gender': '男'}
#我们发现少了 'name':'David' 这个键值对,说明如果键存在,则可以删除键值对

2.3 如何清除字典中所以键值对,但不删除对象

用clear()方法,实例如下:

dict1 = {'name':'David','age':20,'gender':'男'}
dict1.clear()
print(dict1)
#显示的结果是一个空字典 {} 和 del不同的是del是删除字典变量,再次调用会报错

3、python字典常用操作之修改

3.1 如果对 字典(dict )中存在的键进行赋值,那么就是对字典进行修改,新赋的 value 就会覆盖原有的 value,这样即可改变 dict 中的 key-value 对。例如如下代码:

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
dict1['name'] = 'xinbiancheng.cn'
print(dict1)
# 运行显示的结果 {'name': 'xinbiancheng.cn', 'age': 20, 'gender': '男'}
# 我们发现 'name'这个键的值,由原来的'David' 修改成为 'xinbiancheng.cn'

3.2 我们如何字典中的键(key)是否存在呢?

如果要判断字典是否包含指定的 key,则可以使用 innot in 运算符。需要指出的是,对于 字典(dict )而言,in 或 not in 运算符都是基于 key 来判断的。例如如下代码:

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
# 判断dict1是否包含名为'name'的key
print('name' in dict1) # True
# 判断dict1是否包含名为'ag'的key
print('ag' in dict1) # False
print('ag' not in dict1) # True

字典和列表的区别

通过上面介绍可以看出,字典的 key 是它的关键。换个角度来看,字典的 key 就相当于它的索引,只不过这些索引不一定是整数类型,字典的 key 可以是任意不可变类型。

此外,还有一点需要指出,列表的索引总是从 0 开始、连续增大的;但字典的索引即使是整数类型,也不需要从 0 开始,而且不需要连续。因此,列表不允许对不存在的索引赋值:但字典则允许直接对不存在的 key 赋值,这样就会为字典增加一个 key-value 的 键值对。

列表不允许对不存在的索引赋值,但字典则允许直接对不存在的 key 赋值。

4、python字典常用操作之查找

4.1 通过key的键进行查找

如果当前查找的key存在,则返回对应的值;否则会报错。

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
print(dict1['name']) #David
print(dict1['id']) #报错信息如下:
# Traceback (most recent call last):
#   File "G:/xinbiancheng.cn/article/article/article/test.py", line 51, in <module>
#     print(dict1['id'])
# KeyError: 'id'
# del(dict1['name'])

4.2 通过get() 方法

语法:

字典序列.get(key,默认值)

注意:如果当前查找的key不存在则返回第二个参数(默认值),如果省略第二个参数,则返回None,但不会报错

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
print(dict1['name']) #David
print(dict1.get('id',666666)) #666666
#虽然没有id这个键,设置了一个666666的默认值,所以会返回666666这个值,不会报错
print(dict1.get('id')) #None
#如果没有id这个键,同时没有设置默认值,则会返回None,也不会报错

4.3 items()、keys()、values()

items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value。这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象,Python 不希望用户直接操作这几个方法,但可通过 list() 函数把它们转换成列表。如下代码示范了这三个方法的用法:

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
print('keys()------------') #查找字典中所有的key,返回可迭代对象
print(dict1.keys())
print(list(dict1.keys())) # 转换成列表
print('values()------------') #查找字典中所有的value,返回可迭代对象
print(dict1.values())
print(list(dict1.values())) # 转换成列表
print('items()------------')
#查找字典中所有的键值对,返回可迭代对象,里面的数据是元组
#元组数据1是字典的key,元组数据2是字典key对应的值
print(dict1.items())
print(list(dict1.items())) # 转换成列表

以上实例显示结果如下:

keys()------------
dict_keys(['name', 'age', 'gender'])
['name', 'age', 'gender']
values()------------
dict_values(['David', 20, '男'])
['David', 20, '男']
items()------------
dict_items([('name', 'David'), ('age', 20), ('gender', '男')])
[('name', 'David'), ('age', 20), ('gender', '男')]

5、python字典的循环遍历之key

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
for key in dict1.keys():
    print(key)

运行结果显示如下:

name
age
gender

6、python字典的循环遍历之value

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
for value in dict1.values():
    print(value)

运行结果显示如下:

David
20
男

7、python字典的循环遍历之键值对

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
for item in dict1.items():
    print(item)

运行结果显示如下:

('name', 'David')
('age', 20)
('gender', '男')

8、python字典的循环遍历之键值对(拆包)

#!/usr/bin/python3
dict1 = {'name':'David','age':20,'gender':'男'}
# xxx.items():返回可迭代对象,内部是元组,元组有2个数据
# 元组的数据1是字典的key,元组的数据2是字典的value值
for key,value in dict1.items():
    print(key)
    print(value)

运行结果显示如下:

name
David
age
20
gender
男

使用字典格式化字符串

前面章节介绍过,在格式化字符串时,如果要格式化的字符串模板中包含多个变量,后面就需要按顺序给出多个变量,这种方式对于字符串模板中包含少量变量的情形是合适的,但如果字符串模板中包含大量变量,这种按顺序提供变量的方式则有些不合适。可改为在字符串模板中按 key 指定变量,然后通过字典为字符串模板中的 key 设置值。
例如如下程序:

#!/usr/bin/python3
temp = '教程是:%(name)s, 价格是:%(price)0.2f, 出版社是:%(publish)s'
book = {'name':'Python基础教程', 'price': 66, 'publish': 'xinbiancheng.cn'}
# 方法1 使用字典为字符串模板中的key传入值
print(temp % book)
# 方法2 利用format进行格式化
str1='教程是:{0[name]}, 价格是:{0[price]}, 出版社是:{0[publish]}'.format(book)
print(str1)
# 方法3 利用f 进行格式化
str2=f"教程是:{book['name']}, 价格是:{book['price']}, 出版社是:{book['publish']}"
print(str2)

运行上面程序,可以看到如下输出结果:

教程是:Python基础教程, 价格是:66.00, 出版社是:xinbiancheng.cn
教程是:Python基础教程, 价格是:66, 出版社是:xinbiancheng.cn
教程是:Python基础教程, 价格是:66, 出版社是:xinbiancheng.cn

以上三种方法都可以格式化字典,大家喜欢用那一种都可以