字典

  • 字典
  • 创建字典
  • 基本字典操作
  • 字典方法

字典

一种可通过名称来访问其各个值的数据结构。这种数据结构称为映射(mapping)。字典是Python中唯一的内置映射类型,
其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。

创建字典

# 字典以类似于下面的方式表示:
phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

函数 dict
可使用函数 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) 返回字典 d 包含的项(键值对)数。
d[k] 返回与键 k 相关联的值。
d[k] = v 将值 v 关联到键 k 。
del d[k] 删除键为 k 的项。
k in d 检查字典 d 是否包含键为 k 的项。

# 虽然字典和列表有多个相同之处,但也有一些重要的不同之处
键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何【不可变】的类型,如浮点数(实数)、字符串或元组。
自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。然而,如果不使用 append 或其他类似的方法,就不能给列表中没有的元素赋值。
成员资格:表达式 k in d (其中 d 是一个字典)查找的是键而不是值,而表达式 v in l (其中 l 是一个列表)查找的是值而不是索引

字典方法

1. clear 删除所有的字典项 这种操作是就地执行的(就像 list.sort 一样),因此什么都不返回(或者说返回 None )
	>>> d = {}
	>>> d['name'] = 'Gumby'
	>>> d['age'] = 42
	>>> d
	{'age': 42, 'name': 'Gumby'}
	>>> returned_value = d.clear()
	>>> d
	{}
	>>> print(returned_value)
	None
 2. 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', 'machines': ['foo', 'baz']}
	
	一种办法是执行深复制,即同时复制值及其包含的所有值,等等。为此,
	可使用模块 copy 中的函数 deepcopy 。
	>>> from copy import deepcopy
	>>> d = {}
	>>> d['names'] = ['Alfred', 'Bertrand']
	>>> c = d.copy()
	>>> dc = deepcopy(d)
	>>> d['names'].append('Clive')
	>>> c
	{'names': ['Alfred', 'Bertrand', 'Clive']}
	>>> dc
	{'names': ['Alfred', 'Bertrand']}
 3. fromkeys 创建一个新字典,其中包含指定的键,且每个键对应的值都是 None
	>>> {}.fromkeys(['name', 'age'])
	{'age': None, 'name': None}
	
	>>> dict.fromkeys(['name', 'age'])
	{'age': None, 'name': None}
	
	如果你不想使用默认值 None ,可提供特定的值。
	>>> dict.fromkeys(['name', 'age'], '(unknown)')
	{'age': '(unknown)', 'name': '(unknown)'}
 4. get 
	如果你试图访问字典中没有的项,将引发错误。
	>>> d = {}
	>>> print(d['name'])
	Traceback (most recent call last):
	File "<stdin>", line 1, in ?
	KeyError: 'name'
	
	而使用 get 不会这样:
	>>> print(d.get('name'))
	None
	
	你可指定“默认”值,这样将返回你指定的值而不是 None 。
	>>> d.get('name', 'N/A')
	'N/A'
 5. 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')])
 6. keys 返回一个字典视图,其中包含指定字典中的键
 7. pop 可用于获取与指定键相关联的值,并将该键值对从字典中删除
	>>> d = {'x': 1, 'y': 2}
	>>> d.pop('x')
	1
	>>> d
	{'y': 2}
 8. popitem 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'}
 9. setdefault 它也获取与指定键相关联的值,但除此之外, setdefault还在字典不包含指定的键时,在字典中添加指定的键值对
	 >>> d = {}
	>>> d.setdefault('name', 'N/A')
	'N/A'
	>>> d
	{'name': 'N/A'}
	>>> d['name'] = 'Gumby'
	>>> d.setdefault('name', 'N/A')
	'Gumby'
	>>> d
	{'name': 'Gumby'}
 10. 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)
	>>> d
	{'url': 'http://www.python.org', 'changed':
	'Mar 14 22:09:15 MET 2016', 'title': 'Python Language Website'}
 11. values  返回一个由字典中的值组成的字典视图
	>>> d = {}
	>>> d[1] = 1
	>>> d[2] = 2
	>>> d[3] = 3
	>>> d[4] = 1
	>>> d.values()
	dict_values([1, 2, 3, 1])