python 学习笔记 三 字典
字典
Python的高效的key/value哈希表结构叫做"dict", dict的内容可以写成一系列的key:value对并放入{ }中, 相当于: dict = {key1:value1, key2:value2, ...}, 一个空的字典就是俩个大括号{ }. 下面是从一个空字典创建字典以及一些关键点:
数字, 字符串和元组可以作为字典的key, value可以是任何类型(包括字典).
## Can build up a dict by starting with the the empty dict {} ## and storing key/value pairs into the dict like this: ## dict[key] = value-for-that-key dict = {} dict['a'] = 'alpha' dict['g'] = 'gamma' dict['o'] = 'omega' print dict ## {'a': 'alpha', 'o': 'omega', 'g': 'gamma'} print dict['a'] ## Simple lookup, returns 'alpha' dict['a'] = 6 ## Put new key/value into dict 'a' in dict ## True ## print dict['z'] ## Throws KeyError if 'z' in dict: print dict['z'] ## Avoid KeyError print dict.get('z') ## None (instead of KeyError)
dict函数
可以使用dict函数, 通过其他映射或者(键, 值)这样的序列对建立字典:
>>> items = [('name','Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'age':42, 'name': 'Gumby'}
dict函数也可以通过关键字来创建字典:
>>> d = dict(name='Gumby', age=42)
>>> d
{'age':42, 'name': 'Gumby'}
基本字典操作与字符串格式化
- len(d): 返回键值对的数量
- d[k]: 返回关联到键k上的值
- d[k]=v: 将值v关联到键k上
- del d[k]: 删除键为k的项
- k in d: 检查键为k的项是否在d中, 注意这里查找的是键而不是值
使用字典格式化字符串:
>>> phonebook = {'Beth': '9102', 'Alice': '2341'}
>>> "Alice's phone number is %(Alice)s." % phonebook
"Alice's phone number is 2341."
字典方法
1.clear
清除字典中所有的项: d.clear(), 清除后d是一个空字典
2.copy
返回一个具有相同键-值对的新字典: new_d = d.copy(), 这个方法实现的是浅复制(shallow copy), 也就是说修改了副本中的某个值时, 原字典也会受影响, 为避免这个问题, 采用深复制(deep copy): from copy import deepcopy new_d = d.deepcopy().
3.fromkeys
使用给定的键建立字典, value被设为None.
>>> d = {}
>>> d.fromkeys(['name', 'age'])
>>> d
{'name':None, 'age':None}
4.get
当我们用d[key]访问字典中不存在的项会出现KeyError, 而用get方法就不会:
>>> d = {}
>>> d.get('name')
None
用get方法访问不存在的键会得到None值, 我们可以自定义None值:
>>> d.get('name', 'N/A')
'N/A'
当键存在, get方法和普通字典查询一样
5. has_key
检查字典中是否含有给出的key, 有, 返回True否则返回False: d.has_key(k)
6.items和iteritems
items方法将所有字典项以列表方式返回, iteritems的作用大致相同, 但会返回一个迭代器对象而不是列表.
7.key和iterkeys
和上面的一样, 只不过列表元素是key
8.values和itervalues
和上面一样, 列表元素是value
9.pop
用于获得给定键的值, 然后从字典中移除这个键-值: v = d.pop(k)
10. popitem
弹出字典中的一个随机项: d.popitem()
11.setdefault
类似get, 不同的是, setdefault可以在字不含有key时自动为字典添加相应的键值
>>> d = {}
>>> d.setdefault('name', 'bob')
'bob
>>> d
{'name': 'bob'}
如果不给出value, 会默认使用None.
12.update
利用一个字典更新另一个字典: d.update(x), 在d中添加x的项, 若有相同的键, 会被覆盖.