目前为止,字典(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 "<input>", line 1, in <module>
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 "<input>", line 1, in <module>
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 "<input>", line 1, in <module>
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 "<input>", line 1, in <module>
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 "<input>", line 1, in <module>
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 "<input>", line 1, in <module>
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、总结