文章目录
- 1. 字典介绍
- 2. 创建字典
- 3. 类型转换
- dict() 函数
- 4. 获取字典的值
- get() 方法 ---获取指定键的值
- setdefault() 方法
- items() 方法
- keys() 方法 ---获取所有的键名
- values() 方法 ---获取所有的键值
- 5. 修改字典的值
- 修改值后的内存变化
- 6. 更新字典
- update() 方法
- 7. 统计字典
- len()方法
- 删除字典的值
- pop()方法
- popitem() 方法
- 8. 判断字典的值
- 成员运算
1. 字典介绍
字典是一种可变数据,且可存储任意类型对象。
键值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键名不行,键名必须不可变,如元组、字符串、数字这些可以当键名,列表就不能当键名。
格式:
字典的每个键值 key=>value 对用冒号 : 分割
每个键对之间用逗号(,)分割,首尾包括在大括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2, key3 : value3 }
字典在内存的存储示意图:
2. 创建字典
- 创建字典如介绍中的格式就可以创建,如下
dict_a = {'name': 'XWenXiang', 'age': 15, 'hobby': 'girl'}
- 创建空字典,使用 {} 来创建,如下
dict_a = {}
print(dict_a)
- 使用方法 fromkeys()
fromkeys() 方法用于创建一个新字典,以序列 seq 中元素做字典的键,value
为字典'所有'键对应的初始值。
fromkeys() 方法语法:
dict.fromkeys(seq[, value])
seq -- 字典键值列表。(可以为列表、元组、字符串等等可被 for 循环的)
value -- 初始值,默认为 None。
代码示例:
x = ['name', 'age', 'hobby'] # 将列表 x 中的值作为键名
dict_a = dict.fromkeys(x, '6') # 创建一个新字典 dict_a
print(dict_a)
打印结果:
{'name': '6', 'age': '6', 'hobby': '6'}
'''
注意点一:
若是将字符串作为新字典的键名,那么字符串的元素会被拆开分别当作
键名。
注意点二:笔试题
x = ['name', 'age', 'hobby']
dict_a = dict.fromkeys(x, [])
dict_a['name'].append('8')
print(dict_a)
当我们将空列表作为键值传入字典后,再去添加字典中的某一个键名的
空列表值时,所有的空列表值都会被添加。
'''
3. 类型转换
dict() 函数
dict() 函数可以将别的类型转换为字典型。
第一种使用方式
代码示例
x = dict(name='a', age='b', hobby='t')
print(x)
输出结果
{'name': 'a', 'age': 'b', 'hobby': 't'}
传入关键字来创建,将赋值的变量名作为键名,值作为键值传入。
第二种使用方法
使用可迭代对象创建字典
代码示例
x = dict([('name', 'a'), ('age', 'b')])
print(x)
输出结果
{'name': 'a', 'age': 'b'}
用列表包含元组的形式,或者用元组来包含元组来创建字典,只要是可迭代的就行
键名和键值的值要放在同一个可迭代的数据集里。
4. 获取字典的值
第一种获取方法
字典是通过键名来访问键值的,所有我们可以通过键名获取字典的值
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a['age'])
输出结果
15
通过键名可以取出键值。
注意点,我们通过键名可以取出键值,这个是在字典里面有该键名的情况下,若是没有该键名时,程序会报错!所以推荐使用第二种方法取值
get() 方法 —获取指定键的值
第二种获取方法
get() 函数返回指定键的值。
get()方法语法:
dict.get(key[, value])
key -- 字典中要查找的键。
value -- 可选,如果指定键的值不存在时,返回该默认值。
代码示例
dict_a = {'name': 'XWenXiang', 'hobby': 'girl'}
print(dict_a.get('id'))
打印结果
None
我们可以看到和通过键名直接查找不同,用 get() 函数来查找不存在的键名时,
返回的时 None,而不是报错,所以推荐使用
我们也可以改变 value 的值来改变当没有此键名的时候显示的内容。
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a.get('id', '我真帅'))
此时返回的值就不是 None 了。
setdefault() 方法
setdefault() 方法和 get()方法 类似, 如果指定键不存在于字典中,将会添
加键并将值设为默认值。
setdefault()方法语法:
dict.setdefault(key, default=None)
key -- 查找的键值。
default -- 键不存在时,设置的默认键值
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a.setdefault('name','XWenXiang'))
print(dict_a)
输出结果
{'age': 15, 'hobby': 'girl', 'name': 'XWenXiang'}
get() 方法只是返回默认值或者指定值,并没有把键添加进字典
而setdefault() 会把键加进字典。
items() 方法
items()方法语法:
dict.items()
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a.items())
输出结果
dict_items([('age', 15), ('hobby', 'girl')])
此时输出可以看成一个列表中套了元组。
但在python2中它就是一个列表为 [('hobby', 'girl'), ('age', 15)]
拓展:
我们在对字典进行 for 循环的时候可以如下代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
for i, j in dict_a.items():
print(i, '', end='')
print(j)
这样我们就可以同时获得字典的键名和键值的循环了。
keys() 方法 —获取所有的键名
keys()方法语法:
dict.keys()
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a.keys())
输出结果
dict_keys(['age', 'hobby'])
'''
在python3中输出为 dict_keys(['age', 'hobby']) 可以看作是列表。
而在python2中,它就是生成了列表为 ['hobby', 'age'] 。
'''
values() 方法 —获取所有的键值
values()方法语法:
dict.values()
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a.values())
输出结果
dict_values([15, 'girl'])
和 keys() 方法类似,在python2中就会生成一个列表。
5. 修改字典的值
我们知道可以通过键名取出键值,同样也可以通过键名来改变字典的值。
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print(dict_a['age'])
dict_a['age'] = 18
print(dict_a['age'])
输出结果
15
18
我们可以直接重新赋值来改变键值。
修改值后的内存变化
修改字典的值时,字典的内存地址是不变的,变的是字典里面的键的地址。
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
print('字典的位置', id(dict_a))
print('键名age的位置', id(dict_a['age']))
dict_a['age'] = 18
print('字典的位置', id(dict_a))
print('键名age的位置', id(dict_a['age']))
打印结果
字典的位置 2457929794560
键名age的位置 2457928467120
字典的位置 2457929794560
键名age的位置 2457928467216
我们可以看到,字典的位置并没有变,只是字典里的键名指向的内存地址变了。
所以字典是可变类型。
也就是下图的连接2 断了,连接1 并没有断。
添加键对
我们也可以通过键名添加新的键值对
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
dict_a['name'] = 'XWenXiang'
print(dict_a)
打印结果
{'age': 15, 'hobby': 'girl', 'name': 'XWenXiang'}
我们可以看到,原本 dict_a 上没有 name 键名,我们可以通过添加新键名对应
键值加一个键值对。
6. 更新字典
update() 方法
update() 函数把第二个字典的键值对更新到第一个字典里
update() 方法语法:
dict.update(dict2)
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
dict_b = {'age': 18, 'name': 'XWenXiang'}
dict_a.update(dict_b)
print(dict_a)
输出结果
{'age': 18, 'hobby': 'girl', 'name': 'XWenXiang'}
'''
需要注意的是,上面代码示例是把 dict_b 加到 dict_a 中,而且,dict_b中
有和 dict_a 重复的键值对,这个时候,后面的会把前面的键值对给更新修改掉
'''
7. 统计字典
len()方法
和列表一样,字典也可以统计键值对的个数
dict_a = {'age': 15, 'hobby': 'girl'}
print(len(dict_a))
返回的是键值对的个数。
删除字典的值
删除字典的值我们可以用最简单暴力的 del 来删除
通过 del 字典的键名可以删除此键名对应的键值对。
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
del dict_a['age']
print(dict_a)
输出结果
{'hobby': 'girl'}
此时,键名为 age 的键对已经被删除。
pop()方法
和列表一样,字典也可以用 pop() 方法来删除值。
pop()方法语法:
pop(key[,default])
key: 要删除的键值
default: 如果没有 key,返回 default 值
'若是没有指定的键名,会返回设定好的 default 值。'
代码示例
dict_a = {'age': 15, 'hobby': 'girl'}
dict_a.pop('age')
print(dict_a)
输出结果
{'hobby': 'girl'}
结果和 del 删除的方法一样,不同的是 pop 方法是弹出,没有完全删除,还可
以利用利用。
注意点,使用 pop() 方法弹出键值对时,若是没有在字典里找到指定的键名,程序会报错。
popitem() 方法
和 pop()方法相似,不过它时随机返回并删除字典中的最后一对键和值。
popitem()方法语法:
popitem()
'注意点,该方法里面没有参数,而且若是字典为空时,程序会报错。'
8. 判断字典的值
成员运算
in 判断指定键名或者指定键值是否在字典里
代码示例一 :判断是否在字典所有的键名里
dict_a = {'age': 15, 'hobby': 'girl'}
print('name' in dict_a)
输出结果
False
代码示例二 :判断是否在字典所有的键值里
dict_a = {'age': 15, 'hobby': 'girl'}
print(15 in dict_a.values())
输出结果
True