字典是Python中比较特别的一类数据类型,字典中的每个成员是以“键(key):值(value)”对的形式存在的。
字典以大括号“{}”包围的以“键:值”对方式声明和存在的结构数据。与列表最大的不同在于字典是无序的,其成员位置只有象征性,在字典中通过键来访问成员,而不通过其位置来访问该成员。
1、字典键的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
>>> adct = {'name':'kuenen','age':24, 'name':'tom'} >>> adct {'name': 'tom', 'age': 24} >>> adct['name'] 'tom'
2)键必须不可变类型,如数字、字符串、包含不可变对象的元组。
>>> bdct = {('name','age'):('kuenen',25)} >>> bdct {('name', 'age'): ('kuenen', 25)} >>> cdct = {(['name','age']):(['kuenen',25])} Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> cdct = {(['name','age']):(['kuenen',25])} TypeError: unhashable type: 'list'
2、字典的基本操作
(1)创建字典
创建空字典
>>> {} {} >>> dict() {} >>> adct = {'a':1,'b':2,'c':3} >>> adct {'c': 3, 'a': 1, 'b': 2}
(2)访问字典的值
>>> bdct = {'name':'kuenen','age':25} >>> bdct['name'] 'kuenen'
(3)修改字典的值
>>> bdct {'name': 'kuenen', 'age': 25} >>> bdct['age']= 27 >>> bdct {'name': 'kuenen', 'age': 27}
(4)添加键值对
>>> bdct {'name': 'kuenen', 'age': 27} >>> bdct['sex'] = 'man' >>> bdct {'name': 'kuenen', 'age': 27, 'sex': 'man'}
(5)删除字典
>>> bdct {'name': 'kuenen', 'age': 27, 'sex': 'man'} >>> del bdct['age'] # 删除键是'age'的item >>> bdct {'name': 'kuenen', 'sex': 'man'} >>> bdct.clear() # 清空字典所有条目 >>> bdct {} >>> del bdct # 删除字典 >>> bdct Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> bdct NameError: name 'bdct' is not defined
3、字典内置方法
dict.clear() |
删除字典内所有元素 |
dict.copy() |
返回一个字典的浅复制 |
dict.fromkeys(seq,value) |
创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值,默认为None |
dict.get(key, default=None) |
返回指定键的值,如果值不在字典中返回default值 |
dict.items() |
以列表返回可遍历的(键, 值) 元组数组 |
dict.keys() |
以列表返回一个字典所有的键 |
dict.pop(key) |
删除k:v键值对 |
dict.popitem() |
从字典中删除任一k:v键值对,并返回它 |
dict.setdefault(key, default=None) |
和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default |
dict.update(dict2) |
把字典dict2的键/值对更新到dict里 |
dict.values() |
以列表返回字典中的所有值 |
示例代码:
>>> adct = {'name': 'kuenen', 'age': 25} >>> bdct = adct.copy() >>> bdct {'name': 'kuenen', 'age': 25} >>> cdct = dict.fromkeys('python') >>> cdct {'o': None, 't': None, 'y': None, 'n': None, 'p': None, 'h': None} >>> ddct = dict.fromkeys(['python','java'],10) >>> ddct {'python': 10, 'java': 10} >>> adct {'name': 'kuenen', 'age': 25} >>> adct.get('name') 'kuenen' >>> adct.get('class') >>> adct.get('class','None') 'None' >>> adct.items() dict_items([('name', 'kuenen'), ('age', 25)]) >>> for i in adct.items(): print(i) ('name', 'kuenen') ('age', 25) {'name': 'kuenen', 'age': 25} >>> adct.pop('name') 'kuenen' >>> adct {'age': 25} >>> bdct {'name': 'kuenen', 'age': 25} >>> bdct.popitem() ('name', 'kuenen') >>> bdct {'age': 25} >>> adct {'age': 25} >>> adct.setdefault('name') >>> adct {'name': None, 'age': 25} >>> adct.setdefault('age') 25 >>> adct.setdefault('sex','man') 'man' >>> adct {'name': None, 'age': 25, 'sex': 'man'} >>> bdct = {'a':1} >>> adct.update(bdct) >>> adct {'a': 1, 'name': None, 'age': 25, 'sex': 'man'} >>> adct.values() dict_values([1, None, 25, 'man'])
4、字典遍历
(1)遍历字典的key
>>> adct {'a': 1, 'name': None, 'age': 25, 'sex': 'man'} >>> for key in adct.keys(): print(key) a name age sex
(2)遍历字典的value
>>> for value in adct.values():print(value) 1 None 25 man
(3)遍历字典的item
>>> for item in adct.items():print(item) ('a', 1) ('name', None) ('age', 25) ('sex', 'man')
(4)遍历字典的key-value
>>> for key,value in adct.items(): print(key,value) a 1 name None age 25 sex man
参考文档: