一、Python字典
字典时 Python中唯一内建的映射类型,字典指定值并没有特殊顺序,都存储在一个特殊的键(key)里,键可以是数字、字符或元组。
字典是可变类型,可存储任意类型对象。
1.创建和使用字典
d = {key1:value1,key2:value2}
字典由多个键及其对应的值构成的,字典里每个键/值(key/value)对用冒号(:)分割,每个项之间用逗号(,)分割,整个字典包括在花括号中({})。空字典不包含任何项,由两个大括号组成,{}
字典示例:
>>> dict = {'zhangsan': 100 , 'lisi': 99 , 'wangwu': 88} >>> dict {'zhangsan': 100, 'lisi': 99, 'wangwu': 88}
二、字典的基本操作及特性
字典的基本操作在很多方面和序列类似,支持修改、删除等操作。
1.修改字典
>>> num = {'a':1,'b':2} >>> num {'a': 1, 'b': 2} >>> num['a']=3 >>> num {'a': 3, 'b': 2}
2.删除字典元素
>>> num = {'a':1,'b':2,'c':3} >>> num {'a': 1, 'b': 2, 'c': 3} >>> del num['a'] >>> num {'b': 2, 'c': 3}
3.删除整个字典
>>> num = {'a':1,'b':2,'c':3} >>> num {'a': 1, 'b': 2, 'c': 3} >>> del num >>> num Traceback (most recent call last): File "<pyshell#21>", line 1, in <module> num NameError: name 'num' is not defined
删除字典后就不能对字典进行访问了,因为执行del操作后字典就不存在了,所以执行会报变量没有定义的错误。
4.字典的特性
- 字典的值可以是任意类型,但是键不行,键必须为不可变类型(数字、字符串、元组)
- 同一键不要出现2次,如下例子: a的键出现2次,只有后面的值被记住
>>> num = {'a':1,'b':2,'c':3,'a':8} >>> num {'a': 8, 'b': 2, 'c': 3}
三、字典的函数
dict函数
可以使用dict函数,通过其他映射(如其他字典)或键/值序列对建立字典。
语法:
class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg)
参数说明:
- **kwargs -- 关键字
- mapping -- 元素的容器。
- iterable -- 可迭代对象。
例子:
>>> dict() #创建空字典 {} >>> dict(a=1,b=2,c=3) #传入关键字 {'a': 1, 'b': 2, 'c': 3} >>> dict(zip(['a','b','c'],[1,2,3])) #映射函数方式来构造字典 {'a': 1, 'b': 2, 'c': 3} >>> dict([('a',1),('b',2),('c',3)]) #可迭代对象方式来构造字典 {'a': 1, 'b': 2, 'c': 3}
2.len函数
len(dict)函数用于计算字典元素的个数,即键的总数:
例如:
>>> num = {'a':1,'b':2,'c':3} >>> >>> len(num) 3
四、字典的格式化字符串
>>> num = {'张三':1,'李四':2,'王麻子':3} >>> print('王麻子的学号是: %(王麻子)s' % num) 王麻子的学号是: 3 >>>
字典的格式化方式是在每个转换说明符中的 %字符后加上用圆括号括起来的键,在跟上其字典名称
字典和列表的几个特点:
字典的特点:
- 查找和插入的速度极快,不会随着key的增加而变慢。
- 需要占用大量的内存,内存浪费多。
列表的特点:
- 查找和插入时间随着元素的增加而增加。
- 占用空间小,浪费内存很少。
五、字典的方法
1.clear()
clear()方法用于删除字典内的所有项。
语法:
dict.clear()
>>> num = {'a':1,'b':2} >>> num {'a': 1, 'b': 2} >>> num.clear() >>> num {}
2.copy()
copy()方法返回一个具有相同键/值对的新字典。这个方法是浅复制(shallow copy),因为值本身是相同的,而不是副本。
语法:
dict.copy()
>>> num = {'a':1,'b':2} >>> num2 = num.copy() >>> num2 {'a': 1, 'b': 2}
copy
模块提供。了解浅拷贝和深拷贝:
>>> x = [1,2]
>>> y = [3,4]
>>> z = [x,y]
>>> a = copy.copy(z)
>>> a
[[1, 2], [3, 4]]
>>> z
[[1, 2], [3, 4]]
>>> a[0] is z[0]
True
>>> b = copy.deepcopy(z)
>>> b[0] is z [0]
False
浅拷贝拷贝出来的a对象是引用x和y,当修改x或y的值时,a也会改变;
深拷贝会把里面的元素也重新拷贝一份,拷贝了一份x和y的值相等的两个元素,修改x和y的值,不会对b产生影响。
3.fromkeys()
fromkeys()方法用于创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值。
语法:
dict.fromkeys(seq[, value])
- seq -- 字典键值列表。
- value -- 可选参数, 设置键序列(seq)对应的值,默认为 None。
>>> seq = ('name','age','sex') >>> info = dict.fromkeys(seq) >>> info {'name': None, 'age': None, 'sex': None} >>> info = dict.fromkeys(seq,10) >>> info {'name': 10, 'age': 10, 'sex': 10}
4.get()
get()方法返回指定键的值,如果值不在字典中,就返回默认值。
语法:
dict.get(key,default=None)
>>> student ={'zhangsan':'100','lisi':'50'} >>> student.get('zhangsan') '100' >>> student.get('wangwu',1) 1 >>> print(student.get('wangwu')) None
5.key in dict方法
Python字典in 操作符用于判断键是否存在于字典中,如果键在字典中就返回Ttue ,否则返回False。
>>> student ={'zhangsan':'100','lisi':'50'} >>> 'zhangsan' in student True >>> 'zhangsan1' in student False
6.items()
tiems()方法以列表返回可遍历的(键,值)元组数据。
语法:
dict.items()
>>> student ={'zhangsan':'100','lisi':'50'} >>> student.items() dict_items([('zhangsan', '100'), ('lisi', '50')])
7.keys()
keys()方法以列表返回一个字典所有键。
语法:
dict.keys()
>>> student ={'zhangsan':'100','lisi':'50'} >>> student.keys() dict_keys(['zhangsan', 'lisi'])
8.setdefault()
setdefault()方法和get()方法类似,用于获得与给定键相关联的值。如果键不存在与字典中,机会添加键并将值设为默认值。
语法:
dict.setdefault(key,default=None)
>>> student ={'zhangsan':'100','lisi':'50'} >>> student.setdefault('zhangsan') '100' >>> student.setdefault('wangwu',200) 200 >>> student {'zhangsan': '100', 'lisi': '50', 'wangwu': 200} >>> student.setdefault('wangmazi') >>> student {'zhangsan': '100', 'lisi': '50', 'wangwu': 200, 'wangmazi': None}
当键不存在时,setdefalut()方法返回默认值并更新字典,默认值如果不设定就是 None,如果设定就是使用设定的值。
9.update()
update()方法用于把字典dict2的键/值对更新到dict里。
语法:
dict.update(dict2)
>>> student ={'zhangsan':'100','lisi':'50'} >>> student2 = {'xiaoli':80} >>> student.update(student2) >>> student {'zhangsan': '100', 'lisi': '50', 'xiaoli': 80}
10.values()
values()方法以列表形式返回字典中所有值,可以使用list()来转换为列表,与返回键的列表不同,返回的列表中可以包含重复的元素。
语法:
dict.values()
>>> student = {'zhangsan':100, 'lisi':60,'wangwu':100} >>> print('student 字典所有值为:',list(student.values())) student 字典所有值为: [100, 60, 100]