目前为止,字典(dict)是Python唯一内建的映射方式的数据类型。
从Python3.6开始,字典元素的存储顺序由各键值存储时的顺序而定(但依然不支持索引取值)。
字典是无序、可变的。
1、字典的创建
我们通过一对“{}”来创建字典,字典内的每个元素的键和值是通过“:”来分隔的,也就是key:value格式。
字典中的键可以为任意不可变的数据类型(故列表不可以当字典的key),而value则不限制类型。
①使用“=”将一个字典赋值给一个变量
>>>a_dict={'a':1,'b':2,'c':3} >>>a_dict {'a': 1, 'b': 2, 'c': 3}
②使用dict函数来创建字典
>>>keys=['a','b','c','d'] >>>values=[1,2,3,4] >>>dictionary=dict(zip(keys,values)) >>>dictionary {'a': 1, 'b': 2, 'c': 3, 'd': 4}
③以给定内容为键,创建值为空的字典
>>>adict=dict.fromkeys(['apple','orange']) >>>adict {'apple': None, 'orange': None}
#以列表作为字典的键时报错 >>>a_dict={['a']:1,'b':2,'c':3} Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in
TypeError: unhashable type: 'list'
2、字典的添加和修改
①通过字典的key修改对应的value。
用这个方法时,如果键存在,则可以修改该键的值;如果键不存在,则在字典中添加该键值对,但是列表就不能这么添加元素。
>>>adict={'a':1,'b':2,'c':3} >>>adict['a']=0 >>>adict {'a': 0, 'b': 2, 'c': 3} >>>adict['d']=4 >>>adict {'a': 0, 'b': 2, 'c': 3, 'd': 4} #列表 因为列表还没有初始化,这个时候索引为3这个位置不存在。
>>>list1=[] >>>list[3]=3 Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in
TypeError: 'type' object does not support item assignment ②使用字典对象的update()方法将另一个字典的键值对添加到当前字典对象。
若两个字典中存在相同的键,那么使用该方法后,这个键对应的值以另一个字典(非当前)字典的值为准。
(dict不支持“+”的合并方法)
>>>adict={'a':1,'b':2,'c':3} >>>bdict={'c':4,'d':5} >>>adict.update(bdict) >>>adict {'a': 1, 'b': 2, 'c': 4, 'd': 5} >>>adict+bdict Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
3、字典元素的读取
①遍历时字典默认返回字典的键key
>>>dict1={'a':1,'b':2,'c':3} >>>for i in dict1: ... print(i) ... a b c
②使用字典对象的keys()方法可以返回字典的键
>>>dict1={'a':1,'b':2,'c':3} >>>for k in dict1.keys(): ... print(k) ... a b c
③使用字典对象的values()方法可以返回字典的值
>>>dict1={'a':1,'b':2,'c':3} >>>for v in dict1.values(): ... print(v) ... 1 2 3
④以键为下标读取字典元素的值,若键不存在则抛出异常。
>>>aDict={'name':'Dong','sex':'male','age':37} >>>aDict['name'] 'Dong' >>>aDict['tel'] Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in
KeyError: 'tel' ⑤使用字典的get方法获取指定键对应的值,如果键不存在则默认返回None(可以指定为其他值)
>>>dict1={'a':1,'b':2,'c':3} >>>dict1.get('a') 1 >>>print(dict1.get('d')) None >>>print(dict1.get('d','There is no d')) There is no d >>>dict1 {'a': 1, 'b': 2, 'c': 3}
⑥使用字典的setdefault方法获取字典的值,如果键不存在,则添加该键到字典中,并设置默认值None
>>>dict1={'a':1,'b':2,'c':3} >>>dict1.setdefault('d') >>>dict1 {'a': 1, 'b': 2, 'c': 3, 'd': None} >>>dict1.setdefault('a') 1
⑦使用字典对象的items()方法可以返回字典的键值对
>>>dict1={'a':1,'b':2,'c':3} >>>for item in dict1.items(): ... print(item) ... ('a', 1) ('b', 2) ('c', 3) #序列解包用法 >>>for key,value in dict1.items(): ... print(key,value) ... a 1 b 2 c 3
4、字典的删除:
①用del方法删除字典中指定键的元素或删除整个字典
>>>dict1={'a':1,'b':2,'c':3} >>>del dict1['a'] >>>dict1 {'b': 2, 'c': 3} >>>del dict1 >>>dict1 Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in
NameError: name 'dict1' is not defined. Did you mean: 'adict'? ②使用字典对象的pop()方法来删除字典中指定键的元素,返回对应的值;如果键不存在则报错
>>>dict1={'a':1,'b':2,'c':3} >>>dict1.pop('a') 1 >>>dict1 {'b': 2, 'c': 3} >>>dict1.pop('d') Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in
KeyError: 'd' ③使用字典对象的popitem()方法随机删除并返回字典中的一个元素
>>>dict1={'a':1,'b':2,'c':3} >>>dict1.popitem() ('c', 3) >>>dict1 {'a': 1, 'b': 2}
④使用字典对象的clear()方法来删除字典中所有元素
>>>dict1={'a':1,'b':2,'c':3} >>>dict1.clear() >>>dict1 {}
5、字典对象的__contains__方法:和成员运算符作用一样,判断键是否存在字典中
>>>dict1={'a':1,'b':2,'c':3}
>>>dict1.__contains__("a")
True
>>>dict1.__contains__("d")
False
6、总结
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)