字典是另一种可变容器模型,且可存储任意类型对象。
字典形式 key-value。
5.1 创建字典
>>> info = {}
>>> info = dict()
5.2 初始化字典
>>> info = {"only_one" : 'python'}
>>> info = dict(only_one= 'python') # 更优雅
虽然第二种方式看起来更合理,但是会引起不必要的bug
>>> key = 'python'
>>> info = {key, : 'best!!'}
>>> info = {key : 'best!!'}
>>> info
{'python': 'best!!'}
>>> info = dict(key = 'best!!')
>>> info
{'key': 'best!!'}
Python字典还有一种初始化方式,就是使用字典的fromkeys方法可以从列表中获取元素作为键
并用None或fromkeys方法的第二个参数初始化
>>> info = {}.fromkeys(['name', 'python'])
>>> info
{'blog': None, 'name': None}
>>> info = dict().fromkeys(['name', 'blog'])
>>> info
{'blog': None, 'name': None}
>>> info = dict().fromkeys(['name', 'blog'], 'linuxzen.com')
>>> info
{'blog': 'linuxzen.com', 'name': 'linuxzen.com'}
5.3 字典的基本操作
字典的基本行为在很多方面都类似于序列。
- len(d) 返回字典 d 包含的项(键值对)数。
- d[k] 返回与键 k 相关联的值。
- d[k] = v 将值 v 关联到键 k 。
- del d[k] 删除键为 k 的项。
- k in d 检查字典 d 是否包含键为 k 的项。
虽然字典和列表有多个相同之处,但也有一些重要的不同之处。
- 键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变
的类型,如浮点数(实数)、字符串或元组。 - 自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。
然而,如果不使用 append 或其他类似的方法,就不能给列表中没有的元素赋值。 - 成员资格:**表达式 key in dict (其中 dict 是一个字典)查找的是键而不是值,而表达式 value in list (其
中 l 是一个列表)查找的是值而不是索引。 **这看似不太一致,但你习惯后就会觉得相当自
然。毕竟如果字典包含指定的键,检查相应的值就很容易。
5.4 字典的方法
- clear()
方法 clear 删除所有的字典项,这种操作是就地执行的(就像 list.sort 一样),因此什么都不返回(或者说返回 None )。
>>> x = {}
>>> y = x
>>> x['key'] = 'shu'
>>> x
{'key': 'shu'}
>>> y
{'key': 'shu'}
>>> x.clear()
>>> x
{}
>>> y
{}
# 上述场景,x和y同时执行一个字典,这个时候,使用clear(),x和y的值都会被清空。
-------------------------------------------------------------------------------------------------------------
>>> a = {}
>>> b = a
>>> a['key-1'] = 'qiang'
>>> a
{'key-1': 'qiang'}
>>> b
{'key-1': 'qiang'}
>>> a = {}
>>> a
{}
>>> b
{'key-1': 'qiang'}
# 上述场景a和b指向同一个字典,这个时候仅仅把 a = {},并不影响b的值。
- copy()
copy()是一种浅拷贝。下面的例子展示了,直接修改副本的数据,会导致原数据的值发生变化。
>>> x = {'name':'xuxing', 'body-info':['175', '65', '25']}
>>> x
{'name': 'xuxing', 'body-info': ['175', '65', '25']}
>>> y = x.copy()
>>> y
{'name': 'xuxing', 'body-info': ['175', '65', '25']}
>>> y['name'] = 'niudun'
>>> x
{'name': 'xuxing', 'body-info': ['175', '65', '25']}
>>> y
{'name': 'niudun', 'body-info': ['175', '65', '25']}
>>>
>>> y['body-info'].remove('65')
>>>
>>> x
{'name': 'xuxing', 'body-info': ['175', '25']}
>>> y
{'name': 'niudun', 'body-info': ['175', '25']}
>>>
深拷贝deepcopy()
>>> from copy import deepcopy
>>>
>>> x = {'name':'xuxing', 'body-info':['175', '65', '25']}
>>> y = x.copy()
>>> z = deepcopy(y)
>>> x['body-info'].append('500')
>>> x
{'name': 'xuxing', 'body-info': ['175', '65', '25',, '500']}
>>> y
{'name': 'xuxing', 'body-info': ['175', '65', '25', '500']}
>>> z
{'name': 'xuxing', 'body-info': ['175', '65', '25']}
>>>
- fromkeys()
fromkeys 创建一个新字典,其中包含指定的键,且默认每个键对应的值都是 None ,也可以自定义。
>>> {}.fromkeys(['name', 'age'])
{'name': None, 'age': None}
>>> dict.fromkeys(['name', 'age'])
{'name': None, 'age': None}
>>> dict.fromkeys(['name', 'age'], 'nice-value')
{'name': 'nice-value', 'age': 'nice-value'}
>>>
- get()
dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值 - has_key()
dict.has_key(key)
如果键在字典dict里返回true,否则返回false - items()
dict.items()
以列表返回可遍历的(键, 值) 元组数组 - pop()
pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 - popitem()
随机返回并删除字典中的一对键和值. - dict.update(dict2)
把字典dict2的键/值对更新到dict里。