一:介绍
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。
列表是有序的对象集合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识。
字典由索引(key)和它对应的值value组成。
字典也被称作关联数组或哈希表。
字典的特点:
1、 key是唯一的,因为字典数据类型数据的检索是通过key来完成
2、 如果key不唯一,会使用最后一次的key:value键值对来替换之前的同名key:value键值对
3、 key的数据类型必须是不可变数据类型
4、 value的数据类型随意
空字典的创建:
# 空字典的创建
dict1 = {}
普通字典的创建
# 普通字典
dict2 = {'name': '吴', 'age': 18, 'sex': '男'}
使用工厂方法dict()创建
# 使用工厂方法dict()创建字典:
adict1 = dict()
adict2 = dict((['x',1],['y',2]))
# 使用dict()函数创建字典,列表包元组,元组里只能有一对值,将元组里面这一组值作为key:value
dict1 = dict([(12, 'a'), (13, 'b')])
# print(dict1)
# 使用dict()函数创建字典,元组包列表,列表里只能有一对值,将列表里面这一组值作为key:value
dict1 = dict(([12, 'a'], [13, 'b']))
# print(dict1)
# 使用dict()函数创建字典,直接key, value
dict1 = dict(key1='value1', key2='value2')
# print(dict1)
关键字创建
# 关键字参数创建字典,如:
adict3 = dict(name='allen', age='40')
使用fromkeys()创建字典,多种多样
# 字符串
str1 = 'creat'
dict3 = dict.fromkeys(str1, 'value2')
# 元组
tuple1 = (1, 'a', 'b', 2)
dict3 = dict.fromkeys(tuple1, 'value2')
# 集合
set1 = set('key1', 'value1', 4)
dict3 = dict.fromkeys(set1, 'value2')
# 列表
list1 = ['key1', 'key2', 12] # 因为列表里面的元素也是字符串,属于不可变类型
dict3 = dict.fromkeys(list1, 'value2')
print(dict3)
二:
字典两个注意事项:
1、字典中的键必须独一无二,但值则不必。创建时如果同一个键被赋值两次,后一个值会被记住;
# 字典里key是唯一的,因为后面需要用key来进行操作的
# 相同两个key,只会记住后一个key的值
dict2 = {'name': '吴', 'age': 18, 'sex': '男', 'name': 'wu'}
print(dict2)
{'name': 'wu', 'age': 18, 'sex': '男'}
Process finished with exit code 0
2、键必须不可变,可以用数字,字符串或元组充当,但是不可以用列表
2.1、不可变类型–数字
# key的数据类型必须是不可变数据类型
# 不可变类型--数字
dict2 = {'name': '吴', 'age': 18, 'sex': '男'}
dict2[12] = 'a'
print(dict2)
{'name': '吴', 'age': 18, 'sex': '男', 12: 'a'}
Process finished with exit code 0
2.2、不可变类型–字符串
dict2 = {'name': '吴', 'age': 18, 'sex': '男'}
dict2['key1'] = 'value1'
print(dict2)
{'name': '吴', 'age': 18, 'sex': '男', 'key1': 'value1'}
Process finished with exit code 0
2.3、不可变类型–元组
dict2[('key2', 'key3')] = 'value2'
print(dict2)
{'name': '吴', 'age': 18, 'sex': '男', ('key2', 'key3'): 'value2'}
Process finished with exit code 0
2.4、可变类型–列表(会报错)
dict2[[1, 2, 3]] = 'value3'
print(dict2)
Traceback (most recent call last):
File "D:/PycharmProjects/0406_01.py", line 29, in <module>
dict2[[1, 2, 3]] = 'value3'
TypeError: unhashable type: 'list'
Process finished with exit code 1
三、字典的修改、更新(当然使用fromkeys()也是可以新增修改的)
1、使用key作为索引来更改元素的值,如果key存在则更新key的值
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
# 使用key来更新、修改,如果key存在则更新key的值
dict1['name'] = 'wu'
print(dict1)
{'name': 'wu', 'age': 18, 'sex': '男'}
Process finished with exit code 0
2、使用key作为索引来更改元素的值,如果key不存在则新增一条key:value
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
# 使用key来更新、修改,如果key不存在,则新增一条key:value
dict1['address'] = '上海徐汇区'
print(dict1)
{'name': '吴', 'age': 18, 'sex': '男', 'address': '上海徐汇区'}
Process finished with exit code 0
四、字典的几个相关函数
1、keys()函数
# keys()函数,返回一个包含字典所有KEY的列表,会得到一个形式列表,如果你需要将这个形式列表转换为真正的列表,进行数据类型转换
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
print(list(dict1.keys()))
['name', 'age', 'sex']
Process finished with exit code 0
2、values()函数
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
print(list(dict1.values()))
['吴', 18, '男']
Process finished with exit code 0
3、删除函数,有del、clear()、pop()
# 删除,有del、clear()、pop()
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
del dict1['name']
dict1.clear()
dict1.pop('name') # pop()这里是将key弹出并删除,想要保留弹出的可以给个变量接收
dict1.pop('abc', '这个key不存在') # pop(key, 提示信息)如果没找到key,就会抛一个给定的提示信息
4、get()函数
# get(key,'default提示信息')函数,返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
# dict1.get('name')
print(dict1.get('name'))
# dict1.get('abc', '这个key不存在')
print(dict1.get('abc', '这个key不存在'))
吴
这个key不存在
Process finished with exit code 0
5、update()函数
# update()函数,将字典dict1的键值对添加到字典dict2中,无则添加,有则覆盖
dict1 = {'name': '吴', 'age': 18, 'sex': '男'}
dict2 = {'name': '哈', 'age': 20, 'address': '上海徐汇区'}
dict1.update(dict2)
print(dict1)
{'name': '哈', 'age': 20, 'sex': '男', 'address': '上海徐汇区'}
Process finished with exit code 0