字典是无序的对象集合,使用键来存取索引,键必须是惟一的,值可以存取任何数据类型,但是键只能使用字符串、数字或元组,使用值来存取数据,通常用于存储描述一个物体的相关信息。
创建字典
name = {'zhangsan': 12,'lisi': 15,'boxiaoyuan': 22}
print(name) # {'lisi': 15, 'boxiaoyuan': 22, 'zhangsan': 12}
注:字典由多个键及对应的值组成,键和值使用冒号分割,字典中键的值必须唯一,而值不需要,另外,字典中的键必须是不可变的,如:字符串,元组和数字。、
访问字典
age={'zhangsan': 12,'lisi': 15,'boxiaoyuan': 22}
print('age:', age['zhangsan']) # age: 12
修改字典
age={'zhangsan': 12,'lisi': 15,'boxiaoyuan': 22}
age['zhangsan'] = 19 # 修改一个元素的值
age['bokeyuan'] = 33 # 添加一个元素的值
print(age) # {'zhangsan': 19, 'bokeyuan': 33, 'boxiaoyuan': 22, 'lisi': 15}
删除字典
删除字典可以删除对应的键值对,也可以删除整个字典。
age = {'zhangsan': 12, 'lisi': 15, 'boxiaoyuan': 22}
del age['zhangsan'] # {'lisi': 15, 'boxiaoyuan': 22},删除指定的键值对
print(age)
del age # 删除整个字典
print(age) # NameError: name 'age' is not defined
循环遍历
xiaoming = {"name": "xiaoming", "age": 18}
for key in xiaoming:
print("%s:%s" % (key, xiaoming[key]))
在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多。
字典常用的方法
# -*- coding:utf-8 -*- import copy age = {'zhangsan': 12, 'lisi': 15, 'boxiaoyuan': 22} age.pop('boxiaoyuan') # 移出列表中的元素 print(age) # {'zhangsan': 12, 'lisi': 15} print(age.get('lisi')) # 15,获取列表中的元素 print(age.items()) # dict_items([('zhangsan', 12), ('lisi', 15)]),返回可遍历的元组数组 print(age.keys()) # dict_keys(['zhangsan', 'lisi']),返回字典的所有键 print(age.setdefault('wangwu')) # None,根据指定键获取值,如果没有则在字典中新增加键并设置默认值None,如果存在值,则显示出来 print(age.setdefault('zhangsan')) # 12 print(age) # {'zhangsan': 12, 'wangwu': None, 'lisi': 15} age2 = {'bokeyuan': 44} age.update(age2) # 用age2的值更新age的值 print(age) # {'zhangsan': 12, 'wangwu': None, 'lisi': 15, 'bokeyuan': 44} print(age.values()) # dict_values([12, None, 15, 44]),返回字典中所有值 D1 = {'name': 'zhangsan', 'method': ['run', 'eat', 'drink']} # 原始数据 D2 = D1 # 直接引用,D1和D2指向同一对象 D3 = D1.copy() # 浅拷贝,复制时只会复制父对象,不会复制对象内部的子对象 D4 = copy.deepcopy(D1) # 深拷贝,复制父对象和子对象 D1['name'] = 'lisi' D1['method'].remove('eat') print('原始数据:',{'name': 'zhangsan', 'method': ['run', 'eat', 'drink']}) print('D1修改后数据:', D1) # {'name': 'lisi', 'method': ['run', 'drink']} print('D2数据:', D2) # {'name': 'lisi', 'method': ['run', 'drink']} print('浅拷贝数据:', D3) # {'name': 'zhangsan', 'method': ['run', 'drink']} print('深拷贝数据:', D4) # {'name': 'zhangsan', 'method': ['run', 'eat', 'drink']} # 可见,复制后对于原字典内部的子对象(方括号括起的元素)进行操作,浅拷贝字典会受到影响,深拷贝不会受到影响。 lists = [1, 2, 3, 4] dicts = dict.fromkeys(lists) # 创建一个新的字典,seq为字典的键,value为键对应的初始值,默认为None print(dicts) # {1: None, 2: None, 3: None, 4: None} dicts = dict.fromkeys(lists, 10) print(dicts) # {1: 10, 2: 10, 3: 10, 4: 10} print("zhangsan在字典中", 'zhangsan' in age) # True,key in dict用来判断键是否在字典中,在的话,返回True,不在,返回False age.clear() # 清除字典中所有的值 print(age) # {}
字典的其他说明
a)字典的格式化输出
age = {'zhangsan': 12,'lisi': 15,'boxiaoyuan': 22}
print('张三的年龄:%(zhangsan)s' % age) # 12
b)字典和列表的区别
字典的特点:查找和插入的速度非常快,但是需要占用大量内存,内存浪费较多。
列表的特点:查找和插入的速度随着元素的增加而减慢,占用空间小。