Python之字典

字典是无序的对象集合,使用键来存取索引,键必须是惟一的,值可以存取任何数据类型,但是键只能使用字符串、数字或元组,使用值来存取数据,通常用于存储描述一个物体的相关信息。

创建字典

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)字典和列表的区别

字典的特点:查找和插入的速度非常快,但是需要占用大量内存,内存浪费较多。

列表的特点:查找和插入的速度随着元素的增加而减慢,占用空间小。

上一篇:Python之列表


下一篇:python中format函数