字典可以通過將以逗號分隔的 鍵: 值 對列表包含於花括號之內來創建,例如: {‘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}