字典
列表這種數據結構適合將值組織到一個結構中,並通過編號對其進行引用。而字典通過名字來引用值的數據結構,也就是映射。
創建和使用字典
- dict函數
>>> items = [("name","liu"),("age","25")]
>>>> m = dict(items)
>>> m
{'name': 'liu', 'age': '25'}
- 基本字典操作
- len(m) 返回m中項的數量
- m[k] 返回關聯到鍵k上的值
- m[k] = v 將值v關聯到鍵k上
- del m[k] 刪除鍵爲k的值
- k in m 檢查m中是否含有鍵爲k的項
- 字典的鍵不一定爲整型數據,鍵可以是任意的不可變類型
- 即使鍵起初在字典中不存在,也可以爲它賦值
- 表達式k in m 查找的是鍵不是值
>>> m
{'name': 'liu', 'age': '25'}
>>> len(m)
2
>>> m["name"]
'liu'
>>> m["age"] = 22
>>> m
{'name': 'liu', 'age': 22}
>>> del m["age"]
>>> "age" in m
False
>>> "name" in m
True
>>>
>>> x = {}
>>>> x[12] = "test"
>>> x
{12: 'test'}
- 字典方法
- clear
clear方法清除字典中的所有的項
#第一種情況
>>> x = {}
>>> y = x
>>> x["key"] = "value"
>>> x = {}
>>> y
{'key': 'value'}
#第二種情況
>>> x = {}
>>> y = x
>>> x["v"] = "k"
>>> y
{'v': 'k'}
>>> x.clear()
>>> y
{}
- copy
copy方法返回一個具有相同鍵值對的新字典,(這個方法實現是淺複製)
>>> x = {"name":"a1","test":[1,2,3]}
>>> y = x.copy()
>>> y["name"] = "a2"
>>> y["test"].remove(2)
>>> x
{'name': 'a1', 'test': [1, 3]}
>>> y
{'name': 'a2', 'test': [1, 3]}
深複製需要使用copy模塊的deepcopy函數來完成操作
>>> from copy import deepcopy
>>> d = {}
>>> d["name"] = ["d1","d2"]
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d["name"].append("d3")
>>> d
{'name': ['d1', 'd2', 'd3']}
>>> c
{'name': ['d1', 'd2', 'd3']}
>>> dc
{'name': ['d1', 'd2']}
- fromkeys
fromkey方法使用給定的鍵建立新的字典,每個鍵都對應一個默認的值None
>>> {}.fromkeys(["name","age"])
{'name': None, 'age': None}
- get
get方法訪問字典項,如果試圖訪問字典中不存在的鍵時,沒有任何異常,得到了None值,也可以自定義默認值
>>> d.get("name")
['d1', 'd2', 'd3']
>>> print(d.get("age"))
None
>>> print(d.get("age","NA"))
NA
- item和iteritems
item方法將字典所有項以列表的形式返回,列表中的每一項都表示爲鍵值對的形式
iteritems方法的作用大致相同,但會返回一個迭代器對象而不是列表 - keys和iterkeys
key方法將字典中的鍵以列表形式返回,而iterkeys則返回針對鍵的迭代器 - pop
pop方法用來移除給定鍵的值,返回此值
>>> x
{'x1': '1', 'x2': '2', 'x3': '3'}
>>> x.pop("x2")
'2'
>>> x
{'x1': '1', 'x3': '3'}
- popitem
popitem方法類似於list.pop,後者會彈出列表的最後一個元素,但不同的時,popitem彈出隨機的項,因爲字典並沒有”最後的元素“ - setdefault
setdefault方法與get類似,都能獲取給定鍵的值。除此之外,setdefault還能在字典不含有給定鍵的情況下設定相應的鍵值。
>>> d = {}
>>> d.setdefault("name","NA")
'NA'
>>> d
{'name': 'NA'}
>>> d["name"] = "d1"
>>> d.setdefault("name")
'd1'
- update
update方法可以傳入一個字典項更新另外一個字典
>>> d = {"name":"d1","age":"22"}
>>> c = {"name":"c1"}
>>> d.update(c)
>>> d
{'name': 'c1', 'age': '22'}
- values和itervalues
values方法以列表的形式返回字典中的值