字典是列表中常用的方法,我們經常處理字典,字典嵌套,很多復雜的操作都來自於基礎,只是改變了樣式而已,本質是不變的。下面來看看字典中常用的功能都有那些:
1.clear(self)
def clear(self): # real signature unknown; restored from __doc__
""" D.clear() -> None. Remove all items from D. """
pass
clear(self)清除字典中的元素,下面來看看一個實例:
>>> d1 = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> d1.clear()
>>> d1
{}
首先,我們定義了一個字典,然后使用clear(self)清除這個字典,clear()清除了字典中所有的鍵-值對。
2.copy(self)
def copy(self): # real signature unknown; restored from __doc__
""" D.copy() -> a shallow copy of D """
pass
把一個字典賦給另一個變量,我們知道,如果a = b,使用clear()清楚b的內容的時候,a中的內容也會被清除掉。而copy()是新生成了一個變量。
3.fromkeys(*args,**kwargs)
def fromkeys(*args, **kwargs): # real signature unknown
""" Returns a new dict with keys from iterable and values equal to value. """
生成一個新字典,鍵(key)不同,值(value)相同。
pass
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> new_dic = dic.fromkeys(["k1"],"v1")
>>> new_dic
{'k1': 'v1'}
>>> n_dic = dic.fromkeys(["k1","k2","k3","k4"],"v1")
>>> n_dic
{'k4': 'v1', 'k2': 'v1', 'k3': 'v1', 'k1': 'v1'}
>>> d1 = dic.fromkeys(["k1","k2"],"v3")
>>> d1
{'k2': 'v3', 'k1': 'v3'}
4.get(self,k,d=None)
def get(self, k, d=None): # real signature unknown; restored from __doc__
""" D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. """
pass
get(self,k,d=None)獲取字典中的鍵,返回對應的值,如果鍵不存在,則返回d=None,默認是None,我們也可以自己定義,如果獲取不到會怎樣,下面我們來看兩個例子:
我們知道,可以通過鍵得到對應的值:
1.直接獲取值
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic["k1"]
'v1'
>>> dic["k2"]
'v2'
>>> dic["k4"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'k4'
我們知道,如果字典中存在鍵,一定會返回對應的值,"k4"不存在字典中,結果報錯,說鍵值錯誤dic[key]=value.
2.使用get(self,k,d=None)獲取值
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.get("k1")
'v1'
>>> dic.get("k2")
'v2'
>>> dic.get("k4")
>>> None
>>> dic.get("k4","alexsb") (1)
'alexsb'
如果字典中存在指定的鍵,那么就會返回對應的值;我們知道"k4"不存在於字典中,使用get(self,k,d=None)沒有報錯,返回None,我們也可以自己定義返回值,(1)處,我們設定當"k4"不存在的時候返回"alexsb",由於"k4"不存在,因而返回"alexsb".
5.items(self)
def items(self): # real signature unknown; restored from __doc__
""" D.items() -> a set-like object providing a view on D's items """
"""返回字典中的鍵-值對
pass
items(self)返回字典中的鍵-值對,示例如下:
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.items()
dict_items([('k2', 'v2'), ('k3', 'v3'), ('k1', 'v1')])
6.keys(self)
def keys(self): # real signature unknown; restored from __doc__
""" D.keys() -> a set-like object providing a view on D's keys """
pass
keys(self)返回字典中的鍵值,實例如下:
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.keys()
dict_keys(['k2', 'k3', 'k1'])
>>> type(dic.keys())
<class 'dict_keys'>
7.values(self) def values(self): # real signature unknown; restored from __doc__
""" D.values() -> an object providing a view on D's values """
pass
values(self)返回字典中的值,實例如下:
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.values()
dict_values(['v2', 'v3', 'v1'])
8.pop(self,k,d=None)
def pop(self, k, d=None): # real signature unknown; restored from __doc__
"""
D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raised
"""
pass
由於字典是無序的,因此必須指定刪除哪個值,pop(self,k,d=None),下面來看一下:
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
上面我們使用pop()刪除字典元素的時候,提示錯誤,至少需要一個參數,但是我們沒有提供,要記住,字典是無序的,沒有順序,因此必須我們指定鍵值,告訴字典刪除哪個鍵值的元素。
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.pop("k3")
'v3'
>>> dic.pop("k4")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'k4'
>>> dic.pop("k4","alexsb")
'alexsb'
在上面,我們使用pop(self,k,d=None)刪除字典中的元素,必須指定鍵值;如果鍵值不存在,則會提示KeyError:"k4",我們也可以指定當鍵值不存在的時候返回什么值,我們在上面設置,當鍵值不存在的時候返回"alexsb",由於"k4"不存在,因此,因此輸出提示"alexsb"
9.popitem(self)
def popitem(self): # real signature unknown; restored from __doc__
"""
D.popitem() -> (k, v), remove and return some (key, value) pair as a
2-tuple; but raise KeyError if D is empty.
"""
pass
popitem(self)由於字典是無序的,popitem(self)沒有指定參數,因此是隨機刪除字典中的元素,下面我們來看一下:
dic = {'k4': 'v4', 'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
print(dic.popitem())
打印出來的結果時隨機變動的,一會刪除"k4",一會"k1"沒有規律,因此popitem(self)是隨機刪除字典中的元素。
10.setdefault(self,k,d=None)
def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
""" D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
pass
setdefault(self,k,d=None)向字典中加入鍵-值對,如果沒有指定值,那么默認值為None,示例如下:
>>> dic = {'k4': 'v4', 'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.setdefault("k5")
>>> dic
{'k5': None, 'k4': 'v4', 'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.setdefault("k6","sb")
'sb'
>>> dic
{'k2': 'v2', 'k5': None, 'k6': 'sb', 'k4': 'v4', 'k3': 'v3', 'k1': 'v1'}
可以看出,當我們向列表中插入元素時,使用setdefault(self,k,d=None)時,如果沒有定義值,那么就默認是None。否則,等價於dict[key] = value.
11.update(self,E=None,**F)
def update(self, E=None, **F): # known special case of dict.update
"""
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
"""
pass
update(self,E=None,**F)更新列表中的值,也可以用在添加新的鍵-值對進來,示例如下:
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.update({"k5":123})
>>> dic
{'k2': 'v2', 'k5': 123, 'k3': 'v3', 'k1': 'v1'}
>>> dic.update({"k5":456})
>>> dic
{'k2': 'v2', 'k5': 456, 'k3': 'v3', 'k1': 'v1'}
>>> dic = {'k2': 'v2', 'k3': 'v3', 'k1': 'v1'}
>>> dic.update({"k4":"v4","k5":123})
>>> dic
{'k2': 'v2', 'k5': 123, 'k4': 'v4', 'k3': 'v3', 'k1': 'v1'}
可以使用update()向字典中添加字典,即把另外一個字典中的鍵-值對添加到這個字典中的鍵值對。
更新字典中的鍵值對,必須以字典的形式進行跟新。
12.__contains__(self,*args,**kwargs)
def __contains__(self, *args, **kwargs): # real signature unknown
""" True if D has a key k, else False. """
pass
__contains__(self,*args,**kwargs)查看字典中是否包含特定的鍵值對,實例如下:
>>> dic = {'k2': 'v2', 'k5': 123, 'k4': 'v4', 'k3': 'v3', 'k1': 'v1'}
>>> dic.__contains__("k1")
True
>>> dic.__contains__("v2")
False
__contains__(self,*args,**kwargs)判斷字典中是否包含指定的鍵值,在字典中鍵是唯一的,所以查找包含都是對鍵的操作。
13.__delitem__(self,*args,**kwargs)
def __delitem__(self, *args, **kwargs): # real signature unknown
""" Delete self[key]. """
pass
__delitem__(self,*args,**kwargs)刪除字典中的鍵值對,相當於pop(),popitem(),實例如下:
>>> dic = {'k2': 'v2', 'k5': 123, 'k4': 'v4', 'k3': 'v3', 'k1': 'v1'}
>>> dic.__delitem__("k4")
>>> dic
{'k2': 'v2', 'k5': 123, 'k3': 'v3', 'k1': 'v1'}
14.__getattribute__(self,*args,**kwargs)
def __getattribute__(self, *args, **kwargs): # real signature unknown
""" Return getattr(self, name). """
pass
15.__getitem__(self,y)
def __getitem__(self, y): # real signature unknown; restored from __doc__
""" x.__getitem__(y) <==> x[y] """
"""獲取字典中指定鍵的值"""
pass
>>> dic = {'k2': 'v2', 'k5': 123, 'k3': 'v3', 'k1': 'v1'}
>>> dic.__getitem__("k5")
123
16.__iter__(self,*args,**kwargs)
def __iter__(self, *args, **kwargs): # real signature unknown
""" Implement iter(self). """
pass
17.__len__(self,*args,**kwargs)
def __len__(self, *args, **kwargs): # real signature unknown
""" Return len(self). """
pass
__len__(self,*args,**kwargs)統計字典的長度,等價於len(dict),示例如下:
>>> dic = {'k2': 'v2', 'k5': 123, 'k3': 'v3', 'k1': 'v1'}
>>> dic.__len__()
4
>>> len(dic)
4
18.__new__(*args,**kwargs)
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object. See help(type) for accurate signature. """
pass
19.__repr__(self,*args,**kwargs)
def __repr__(self, *args, **kwargs): # real signature unknown
""" Return repr(self). """
pass
20.__setitem__(self,*args,**kwargs)
def __setitem__(self, *args, **kwargs): # real signature unknown
""" Set self[key] to value. """
pass
__setitem__(self,k,v)向字典中添加元素,必須指定鍵和值,否則會報錯,如下:
>>> dic = {'k2': 'v2', 'k5': 123, 'k6': 666, 'k1': 'v1'}
>>> dic.__setitem__("k7")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected 2 arguments, got 1
可以看出,__setitem__(self,k,v)需要兩個參數,但是我們只提供了一個參數給它。
>>> dic = {'k2': 'v2', 'k5': 123, 'k1': 'v1'}
>>> dic.__setitem__("k6",666)
>>> dic
{'k2': 'v2', 'k5': 123, 'k6': 666, 'k1': 'v1'}