第4章 字典:当索引不好用时
4.2. 创建和使用字典
- 字典格式:{key: value, key: value, … key: value}
- 空字典:{}
- 字典中键唯一,值不唯一。
4.2.1. dict函数
#使用(键,值)序列对建立字典
>>> items = [('name', 'gumby'), ('age', 42)]
>>> d = dict([('name', 'gumby'), ('age', 42)])
>>> d
{'age': 42, 'name': 'gumby'}
#使用其他映射建立字典
>>> d1 = dict(d)
>>> d1
{'age': 42, 'name': 'gumby'}
#使用关键字参数来创建字典
>>> d = dict(name='gumby', age=42)
>>> d
{'age': 42, 'name': 'gumby'}
4.2.2. 基本字典操作
- 与序列类似操作
操作 | 说明 |
---|---|
len(d) | 返回d中项(键-值对)的数量 |
d[k] | 返回关联到键k上的值 |
d[k]=v | 将值v关联到键k上 |
del d[k] | 删除键为k的项 |
k in d | 检查d中是否有含有键为k的项 |
2. 与列表区别
区别项 | 字典 | 列表 |
---|---|---|
键类型 | 整型、浮点型、字符串串或元组等不可变类型 | 整型 |
自动添加 | 可将值关联到不存在的键,并字典中建立新项 | 不可将值关联到列表之外的索引 |
成员资格 | 查找键 (效率高,数据结构规模达时更效果更明显) | 查找值 |
4.2.3. 字典的格式化字符串
使用方法:”string1 %(key)format string2” % dictionary
>>> "holly's phone number is %(holly)d" % {'holly':123, 'holly1':456}
"holly's phone number is 123"
4.2.4. 字典方法
1. clear:清除字典中所有的项,无返回值。
>>> d={'key1' : 1, 'key2' : 2}
>>> d
{'key2': 2, 'key1': 1}
>>> d.clear()
>>> d
{}
2. copy:返回一个具有相同键-值对的新字典。
copy方法实现的是浅复制,与其对应的是深复制,具体参照http://blog.csdn.net/heli200482128/article/details/73732072
3. fromkeys:使用给定的键建立新字典。
#使用所有字典的类型dict
#不指定值,默认为None
>>> dict.fromkeys(['name', 'age'])
{'age': None, 'name': None}
#指定值,所有键都使用相同的值
>>> dict.fromkeys(['name', 'age'],['1', '2'])
{'age': ['1', '2'], 'name': ['1', '2']}
4. get:宽松的访问字典项的方法,当访问的键不存在,不会出错。
>>> d = {}
>>> d[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
#当默认情况下,若键不存在,返回None
>>> print d.get(1)
None
#也可以指定键不存在时的返回值
>>> print d.get(1, 'N/A')
N/A
5. has_key:相当于 k in d。Python3.0中不包含此函数。
6. items和iteritems
items:所有字典项以列表方式返回,列表项来自于(键,值)。但是列表项无特殊顺序。
>>> {'name': 'holly', 'phone': 123, 'addr': 'shandongyantai'}.items() [('phone', 123), ('name', 'holly'), ('addr', 'shandongyantai')]
iteritems:返回字典项的迭代器
>>> it = {'name': 'holly', 'phone': 123, 'addr': 'shandongyantai'}.iteritems() >>> it <dictionary-itemiterator object at 0x7fcdbbd7dcb0> >>> list(it) [('phone', 123), ('name', 'holly'), ('addr', 'shandongyantai')]
7. key和iterkeys
- keys:字典中键以列表形式返回。
- iterkeys:返回键的迭代器。
8. pop:获得对应给定键的值,将这个键-值对从字典中移除。
>>> d = {'name': 'holly', 'phone': 123, 'addr': 'shandongyantai'}
>>> d.pop('name')
'holly'
>>> d
{'phone': 123, 'addr': 'shandongyantai'}
9. popitem:弹出字典中随机项。
>>> d = {'name': 'holly', 'phone': 123, 'addr': 'shandongyantai'}
>>> d.popitem()
('phone', 123)
>>> d
{'name': 'holly', 'addr': 'shandongyantai'}
>>> d.popitem()
('name', 'holly')
>>> d
{'addr': 'shandongyantai'}
常用于依次移除并处理项。
10. setdefault:获得与给定键相关联的值,字典中不含有给定键的情况下设定键值。
#当键不存在时,返回默认值并更新字典
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
#当键存在时,返回与其对应的值,但不改变字典。
>>> d['phone'] = 123
>>> d
{'phone': 123, 'name': 'N/A'}
>>> d.setdefault('phone', 'N/A')
123
>>> d
{'phone': 123, 'name': 'N/A'}
11. update:利用字典项更新另一个字典
#字典中的项若键不存在于字典中,则该项会添加到就字典中;若键存在于字典中,字典中相应键值被覆盖
>>> d = {'name': 'holly', 'phone': 123, 'addr': 'shandongyantai'}
>>> d.update({'newkey': 'newvalue', 'phone': 456})
>>> d
{'phone': 456, 'name': 'holly', 'newkey': 'newvalue', 'addr': 'shandongyantai'}
12. values和itervalues
values:以列表形式返回字典中的值,可能包含重复元素。
>>> d = {'name': 'holly', 'phone': 123, 'addr': 'shandongyantai'} >>> d.values() [123, 'holly', 'shandongyantai']
itervalues:返回字典中值的迭代器。