字典
- 字典 dict 是由 键值对组成 {key: value, key: value, key, value}
- key 值需要是不可变类型, 可为(字符串, 数字(int, float), 元祖)
- value 值可以是任意类型
- 在一个字典中, key值是唯一的
- 一个键值对是一个元素
my_dict = {'name': "isaac", 'age': 18, 1: 'hello'}
print(my_dict)
print(type(my_dict))
# 控制台输出
{'name': 'isaac', 'age': 18, 1: 'hello'}
<class 'dict'>
- 字典不支持下标(所以)
- 访问字典 value 值, 通过 key 值
- 字典名[key]
print(my_dict['age'])
print(my_dict[1])
# 控制台输出
18
hello
- 字典名.get(key)
name = my_dict.get('name')
print(name)
# 控制台输出
isaac
- 字典名[key] 和 get(key)
字典名[key] key值不存在, 程序会报错
get(key), key 值不存在, 返回的是None
# print(my_dict['aa']) # 程序报错, key值不存在
print(my_dict.get('aa')) # key 值不存在, 返回None
print(my_dict.get('aa', 'python')) #key 值不存在, 返回的是 "python", 但是不会加入到字典中
print(my_dict)
# 控制台输出
None
python
{'name': 'isaac', 'age': 18, 1: 'hello'}
字典 - 修改和添加元素
- 字典名[key] = value
key 存在, 修改数据
key 不存在, 添加数据
注意点: 对于 key 值来讲, 1 和 1.0 是相同的(2 和 2.0 也是相同的, 以此类推)
my_dict = {'name': 'isaac', 'age': 18, 1: 'hello'}
print(my_dict)
# key 值不存在,添加数据
my_dict['pi'] = 3.14
# key 值存在, 修改数据
my_dict['age'] = 19
#注意点: 对于 key 值来讲, 1 和 1.0 是相同的(2 和 2.0 也是相同的, 以此类推)
my_dict[1.0] = 'python'
# 控制台输出
{'name': 'isaac', 'age': 18, 1: 'hello'}
{'name': 'isaac', 'age': 18, 1: 'hello', 'pi': 3.14}
{'name': 'isaac', 'age': 19, 1: 'hello', 'pi': 3.14}
{'name': 'isaac', 'age': 19, 1: 'python', 'pi': 3.14, 1: 'python'}
- 字典名.update(新字典)
my_dict = {'name': 'isaac', 'age': 18}
my_dict.update({'age': 20, 1: 'hello'})
print(my_dict)
# 控制台输出
{'name': 'isaac', 'age': 20, 'pi': 3.14, 1: 'hello'}
字典 - 删除元素
- del 字典名[key] 删除字典中的键值对
不能 del 字典名[value] 没有定义
my_dict = {'name': 'isaac', 'age': 18, 'pi': 3.14, 1: '111'}
del my_dict['pi']
print(my_dict)
# 不能 del 字典名[value] 没有定义
# del my_dict['18']
# print(my_dict)
# 控制台输出
{'name': 'isaac', 'age': 18, 1: '111'}
# 注意啦 del 不能直接删除字典
my_dict = {'name': 'isaac', 'age': 18, 'pi': 3.14, 1: '111'}
del my_dict
print(my_dict)
# 程序报错
- 字典名.pop(key)
my_dict.pop(1)
print(my_dict)
# 控制台输出
{'name': 'isaac', 'age': 18}
- 字典名.clear() 清空字典,将字典中的多有数据清空
my_dicr.clear()
print(my_dict)
# 控制台输出
{}
字典 - 遍历操作
- 字典名.keys() 可以遍历字典中所有的 key 值
1.1 可以使用 list 将这个内容转换成列表类型
1.2 是可迭代对象, 可以直接使用 for 循环遍历 - 字典名.values 获取所有的 value 值
2.1 利用list 将内容转换成列表类型
2.2 是可迭代对象, 可以直接使用 for 循环遍历 - 字典名.items() 获取所有的键值对
3.1 可以使用 list 将这个内容转换为列表类型
3.2 是可迭代对象, 可以直接使用 for 循环遍历 - 拆包
my_dict = {'name': 'isaac', 'age': 18, 'pi': 3.14, 1: '111'}
my_keys1 = my_dict.keys()
# 输出my_keys 的值和类型
print(my_keys1)
print(type(my_keys1))
# 利用list 将内容转换成列表类型
my_list = list(my_keys1)
print(my_keys1, type(my_keys1))
print(my_list, type(my_list))
# 控制台输出
dict_keys(['name', 'age', 'pi', 1])
<class 'dict_keys'>
dict_keys(['name', 'age', 'pi', 1]) <class 'dict_keys'>
['name', 'age', 'pi', 1] <class 'list'>
1.2.直接 for 遍历
for key in my_keys1:
# key 就是字典中的 key 值
# 输出 key的值, 和 key 对应的 value 值
print(key, my_dict[key])
# 控制台输出
name isaac
age 18
pi 3.14
1 111
- 字典名.values 获取所有的 value 值
my_values = my_dict.values()
print(my_values, type(my_values))
# 控制台输出
dict_values(['isaac', 18, 3.14, '111']) <class 'dict_values'>
- 1 利用list 将内容转换成列表类型
my_list1 = list(my_values)
print(my_values, type(my_values))
print(my_list1, type(my_list1))
# 控制台输出
dict_values(['isaac', 18, 3.14, '111']) <class 'dict_values'>
['isaac', 18, 3.14, '111'] <class 'list'>
2.2直接使用 for 遍历
for value in my_values:
# 注意 字典中没有任何一种方法, 根据 value 找 key
print(value)
# 控制台输出
isaac
18
3.14
111
- 字典名.items() 获取所有的键值对
my_dict = {'name': 'isaac', 'age': 18, 'pi': 3.14, 1: '111'}
my_items = my_dict.items()
print(my_items)
print(type(my_items))
# 控制台输出
dict_items([('name', 'isaac'), ('age', 18), ('pi', 3.14), (1, '111')])
<class 'dict_items'>
3.1 可以使用 list 将这个内容转换成列表类型
my_list = list(my_items)
print(my_items,type(my_items))
print(my_list,type(my_list))
# 控制台输出
dict_items([('name', 'isaac'), ('age', 18), ('pi', 3.14), (1, '111')]) <class 'dict_items'>
[('name', 'isaac'), ('age', 18), ('pi', 3.14), (1, '111')] <class 'list'>
3.2 直接 for 遍历
for item in my_dict.items:
# item 类型是元组, (字典的 key, key 对应的 value 值)
print(item)
print(item[0])
print(item[1])
# 控制台输出
('name', 'isaac')
name
isaac
('age', 18)
age
18
('pi', 3.14)
pi
3.14
(1, '111')
1
111
- 拆包
for key, value in my_dict.items():
# key 是字典中的 key 值, value 就是字典中的 value 值
print(key, value)
# 控制台输出
name isaac
age 18
pi 3.14
1 111
直接使用 for 循环遍历字典, 遍历的是 key 值
for i in my_dict:
print(i)
# 控制台输出
name
age
pi
1
字典 - 有序字典
- 有序字典: 字典中数据的存储按照数据的添加顺序排列
- 打印字典的时候, key 值顺序和定义的时候是一样的
- python 3.6 之前的字典都是无序的
# 创建有序字典
from collections import OrderedDict
my_dict = OrderedDict()
# 向字典中添加数据
my_dict['one'] = 1
my_dict['two'] = 2
my_dict['three'] = 3
my_dict['four'] = 4
print(my_dict)
# 控制台输出
OrderedDict([('one', 1), ('two', 2), ('three', 3), ('four', 4)])