字典可以通过将以逗号分隔的 键: 值 对列表包含于花括号之内来创建,例如: {‘jack’: 4098, ‘sjoerd’: 4127} 或 {4098: ‘jack’, 4127: ‘sjoerd’},也可以通过 dict 构造器来创建。
- class dict(**kwarg)
- class dict(mapping, **kwarg)
- class dict(iterable, **kwarg)
上面三个方法返回一个新的字典,基于可选的位置参数和可能为空的关键字参数集来初始化
如果没有给出位置参数,将创建一个空字典。 如果给出一个位置参数并且其属于映射对象,将创建一个具有与映射对象相同键值对的字典。 否则的话,位置参数必须为一个 iterable 对象。 该可迭代对象中的每一项本身必须为一个刚好包含两个元素的可迭代对象。 每一项中的第一个对象将成为新字典的一个键,第二个对象将成为其对应的值。 如果一个键出现一次以上,该键的最后一个值将成为其在新字典中对应的值。
如果给出了关键字参数,则关键字参数及其值会被加入到基于位置参数创建的字典。 如果要加入的键已存在,来自关键字参数的值将替代来自位置参数的值。
# 以下示例返回的字典均等于 {"one": 1, "two": 2, "three": 3}
>>> a = dict(one=1, two=2, three=3) # 第一个例子这样提供关键字参数的方式只能使用有效的 Python 标识符作为键。 其他方式则可使用任何有效的键
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True
字典所支持的操作在自定义的映射类型也应当支持
- list(d) 返回字典 d 中使用的所有键的列表
- len(d) 返回字典 d 中的项数
- d[key] 返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError。
如果字典的子类定义了方法 _missing_() 并且 key 不存在,则 d[key] 操作将调用该方法并附带键 key 作为参数。 d[key] 随后将返回或引发 _missing_(key) 调用所返回或引发的任何对象或异常。 没有其他操作或方法会发起调用 _missing_()。 如果未定义 _missing_(),则会引发 KeyError。 _missing_() 必须是一个方法;它不能是一个实例变量:
>>> class Counter(dict):
... def __missing__(self, key):
... return 0
>>> c = Counter()
>>> c['red']
0
>>> c['red'] += 1
>>> c['red']
1
- d[key] = value 将 d[key] 设为 value。
- del d[key] 将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError。
- key in d 如果 d 中存在键 key 则返回 True,否则返回 False。
- key not in d 等价于 not key in d。
- iter(d) 返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式
- clear() 移除字典中的所有元素。
- copy() 返回原字典的浅拷贝。
classmethod
- fromkeys(iterable[, value]) 使用来自 iterable 的键创建一个新字典,并将键值设为 value。fromkeys() 属于类方法,会返回一个新字典。 value 默认为 None。
- get(key[, default]) 如果 key 存在于字典中则返回 key 的值,否则返回 default。 如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError。
- items() 返回由字典项 ((键, 值) 对) 组成的一个新视图
- keys() 返回由字典键组成的一个新视图
- pop(key[, default]) 如果 key 存在于字典中则将其移除并返回其值,否则返回 default。 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。
- popitem() 从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO 的顺序被返回。
popitem() 适用于对字典进行消耗性的迭代,这在集合算法中经常被使用。
如果字典为空,调用 popitem() 将引发 KeyError。
注:在 3.7 版更改: 现在会确保采用 LIFO 顺序。 在之前的版本中,popitem() 会返回一个任意的键/值对。 - setdefault(key[, default]) 如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None。
- update([other]) 使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None。
update() 接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。 如果给出了关键字参数,则会以其所指定的键/值对更新字典: d.update(red=1, blue=2)。 - values() 返回由字典值组成的一个新视图
- 两个 dict.values() 视图之间的相等性比较将总是返回 False。 这在 dict.values() 与其自身比较时也同样适用:
>>> d = {'a': 1} >>> d.values() == d.values() False
- 两个字典的比较当且仅当它们具有相同的 (键, 值) 对时才会相等(不考虑顺序)。 排序比较 (’<’, ‘<=’, ‘>=’, ‘>’) 会引发 TypeError。
- 字典会保留插入时的顺序。 请注意对键的更新不会影响顺序。 删除并再次添加的键将被插入到末尾。
注: 在 3.7 版更改: 字典顺序会确保为插入顺序。 此行为是自 3.6 版开始的 CPython 实现细节。>>> d = {"one": 1, "two": 2, "three": 3, "four": 4} >>> d {'one': 1, 'two': 2, 'three': 3, 'four': 4} >>> list(d) ['one', 'two', 'three', 'four'] >>> list(d.values()) [1, 2, 3, 4] >>> d["one"] = 42 >>> d {'one': 42, 'two': 2, 'three': 3, 'four': 4} >>> del d["two"] >>> d["two"] = None >>> d {'one': 42, 'three': 3, 'four': 4, 'two': None}