创建和使用字典
>>> phonebook = {'Alice':'2341','Beth':'9102','Cecil': '3258'}
函数dict
从其他映射(如其他字典)或键-值对序列创建字典。
>>> items = [('name', 'Gumby'), ('age', 42)]>>> d = dict(items)>>> d{'age':42,'name': 'Gumby}>>> d['name']'Gumby'
还可使用关键词实参来调用函数
>>> d = dict(name='Gumby', age=42)>>> d{'age': 42, 'name': 'Gumby'}
基本的字典操作
- len(d) 返回字典1d包含的项(键-值对)数。
- d[k] 返回与键k想关联的值。
- d[k] = v 将值b关联到键k。
- del d[k] 删除键为k的项。
- k in d 检查字典d是否包含键为 k 的项。
format_map
>>> phonebook{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}>>> "Cecil's phone umber is {Cecil}.".format_map(phonebook)"Cecil's phone number is 3258."
在模板系统中,这种字符串格式设置方式很有用(下面的示例使用的是HTML)。
template = '''<html><head><title>{title}</title></head><body><h1>{title}</h1><p>{text}</p></body>'''data = {'title': 'My Home Page', 'text': 'Welcome to my home page!'}print(template.format_map(data))# html# <head><title>My Home Page</title></head># <body># <h1>My Home Page</h1># <p>Welcome to my home page!</p># </body>
字典方法
clear
删除所有的字典项,就地执行的,因此什么都不返回(或者说返回None)。
>>> d = {'age': 42, 'name': 'Gumby'}>>> returned_value = d.clear()>>> d{}>>> print(returned_value)None
copy
返回一个新字典。执行的是浅复制,因为值本身是原件,而非副本。
>>> x = {'username': 'admin', 'machines': ['foo', 'bar','baz']}>>> y = x.copy()>>> y['username'] = 'mlh'>>> y['machines'].remove('bar')>>> y{'username': 'mlh', 'machines': ['foo', 'baz']}>>> x{'username': 'admin', 'machine': ['foo','baz']}
深复制,可以使用模块 copy 中的函数deepcopy。
>>> from copy import deepcopy>>> d = {'name': ['Alfred','Bertrand']}>>> dc = deepcopy(d)>>> d['name'].append('Clive')>>> dc{'name': ['alfred', 'Bertrand']}
fromkeys
创建一个新字典,其中包含指定的键,且每个键对应的值都是None。
>>> {}.fromkeys(['name','age']){'age': None,'name': None}
上面这个示例首先创建了一个空字典,再对其调用方法fromkeys来创建另一个字典,这显得有点多余。可以直接对 dict 调用方法fromkeys。
>>> dict.fromkeys(['name','age']){'age': None, 'name': None}# 如果不想使用默认值None,可提供特定的值。>>> dict.fromkeys(['name', 'age'], '(unknown)'){'age': '(unknown)', 'name': '(unknown)'}
get
使用get来访问不存在的键,不会引发异常,而是返回None。可指定“默认”值,这样将返回指定的值而不是None。
>>> d = {'age': 42}>>> d.get('name', 'N/A')'N/A'>>> d.get('age')42
items
返回一个包含所有字典项的列表,其中 每个元素都为(key, value)的形式。字典项在列表中的排序顺序不确定。
>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}>>> d.items()dict_items([('url', 'http://www.python.org'),('spam',0),('title','Python Web Site')])
返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代。另外可以确定其长度,对其执行成员资格检查。
>>> it = d.items()>>> len(it)3>>> ('spam', 0) in itTrue
视图的一个优点是不复制,他们始终是底层字典的反映,及时修改了底层字典亦是如此。
>>> d['spam'] = 1>>> ('spam', 0) in itFalse>>> d['spam'] = 0>>> ('spam', 0) in itTrue
keys
返回一个字典视图,其中包含指定字典中的键。
pop
获取与指定键相关联的值,并将该键-值对从字典中删除。
>>> d = {'x': 1, 'y': 2}>>> d.pop('x')1>> d{'y': 2}
popitem
类似于list.pop,但list.pop弹出列表中的最后一个元素,而popitem随机地弹出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念。如果需要高效的逐个删除并处理所有字典项,这样无需获取键列表。
>>> d = {'url':'http://www.python.org','spam': 0,'title': 'Python Web Site'}>>> d.popitem()('url', 'http://www.python.org')>>> d{'spam': 0, 'title': 'Python Web Site'}
setdefault
与get很像,获取与指定键相关联的值,但除此之外,还在字典不包含指定的键时,在字典中添加指定的键-值对, 如果没有指定,默认为None。
>>> d = {}>>> d.setdefault('name', 'N/A')'N/A'>>> d{'name': 'N/A'}>>> d['name'] = 'Gumby'>>> d.setdefault('name', 'N/A')'Gumby'>>> d{'name': 'Gumby'}
update
使用一个字典中的项来更新另一个字典。
d = {'title': 'Python Web Site','url': 'http://www.python.org','changed': 'Mar 14 22:09:15 MET 2016'}x = {'title': 'Python Language Website'}d.update(x)print(d)# {'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2016','title': 'Python Language Website'}
对于通过参数提供的字典,将其项添加到当前字典中。如果当前字典包含键相同的项,则替换。
values
返回一个由字典中的值组成的字典视图。返回的视图可能包含重复的值。
>>> d = {1:1,2:2,3:1}>>> d.values()dict_values([1, 2, 1])
