官术网_书友最值得收藏!

5.3 字典方法

像其他內建類型一樣,字典也有方法,這些方法非常有用,不過可能不像使用列表或字符串一樣頻繁使用。學習本節時可以先簡單瀏覽了解一下有哪些方法可以使用,然后在需要時回過頭來查看特定方法的具體用法。

5.3.1 clear()方法

clear()方法用于刪除字典內的所有項。

clear()方法的語法如下:

dict.clear()

此語法中dict代表指定字典,該方法不需要參數。該函數是一個原地操作(類似于list.sort)函數,沒有任何返回值(返回值為None)。

該方法使用示例如下:

        >>> student={'小萌': '1001','小智': '1002','小強': '1005','小張': '1006'}
        >>> print('字典元素個數為:%d個' % len(student))
        字典元素個數為:4個
        >>> student.clear()
        >>> print('字典刪除后元素個數為:%d個' % len(student))
        字典刪除后元素個數為:0個

由輸出結果可知,字典調用clear方法后整個字典內所有項都被刪除。

下面看兩個示例。

示例1:

        >>> x={}
        >>> y=x
        >>> x['key']='value'
        >>> y
        {'key': 'value'}
        >>> x={}
        >>> y
        {'key': 'value'}

示例2:

        >>> x={}
        >>> y=x
        >>> x['key']='value'
        >>> y
        {'key': 'value'}
        >>> x.clear()
        >>> y
        {}

兩個示例中,x和y最初對應同一個字典。示例1中,通過將x關聯到一個新的空字典對它重新賦值,這對y沒有任何影響,還關聯到原先的字典。若想清空原始字典中所有元素,則必須使用clear方法,使用clear后,y的值也被清空了。

5.3.2 copy()方法

copy()方法返回一個具有相同鍵/值對的新字典。這個方法是淺復制(shallow copy),因為值本身是相同的,而不是副本。

copy()方法的語法如下:

dict.copy()

此語法中dict代表指定字典,該方法不需要參數。返回結果為一個字典的淺復制。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002', ’小強’: '1005', ’小張’: '1006'}
        >>> st=student.copy()
        >>> print(’復制后得到的st為:', st)
        復制后得到的st為: {’小強’:'1005',’小萌’:'1001',’小智’:'1002',’小張’:'1006'}

由輸出結果看到,使用copy方法可以將字典復制給另一個變量。

我們可以通過下面的示例了解什么是淺復制。

        >>> student={’小智’: '1002', 'info':[’小張’, '1006', 'man']}
        >>> st=student.copy()
        >>> st[’小智’]='1005'
        >>> print(’更改copy后的st為:', st)
        更改copy后的st為: {'info': [’小張’,'1006','man'],’小智’:'1005'}
        >>> print(’原字符串為::', student)
        原字符串為:: {'info': [’小張’,'1006','man'],’小智’:'1002'}
        >>> st['info'].remove('man')
        >>> print(’刪除后st為:', st)
        刪除后st為: {'info': [’小張’,'1006'],’小智’:'1005'}
        >>> print(’刪除后student為:', student)
        刪除后student為: {'info': [’小張’,'1006'],’小智’:'1002'}

由輸出結果看到,替換副本的值時原始字典不受影響。如果修改了某個值(原地修改,不是替換),原始字典就會改變,因為同樣的值也在原字典中。以這種方式進行復制就是淺復制,而使用深復制(deep copy)可以避免該問題,此處不做講解,有興趣的讀者可以自己查找相關資料。

5.3.3 fromkeys()方法

fromkeys()方法用于創建一個新字典,以序列seq中的元素做字典的鍵,value為字典所有鍵對應的初始值。

fromkeys()方法的語法如下:

dict.fromkeys(seq[, value]))

此語法中dict代表指定字典;seq代表字典鍵值列表;value代表可選參數,設置鍵序列(seq)的值。該方法返回結果為列表。

該方法使用示例如下:

        >>> seq = ('name', 'age', 'sex')
        >>> info = dict.fromkeys(seq)
        >>>print ("新的字典為 : %s" %  info)
        新的字典為 :{'name': None,'sex': None,'age': None}
        >>> info = dict.fromkeys(seq, 10)
        >>>print ("新的字典為 : %s" %  info)
        新的字典為 :{'name': 10,'sex': 10,'age': 10}

由輸出結果看出,fromkeys方法使用給定的鍵建立新字典,每個鍵默認對應的值為None。

5.3.4 get()方法

get()方法返回指定鍵的值,如果值不在字典中,就返回默認值。

get()方法的語法如下:

dict.get(key, default=None)

此語法中dict代表指定字典,key代表字典中要查找的鍵,default代表指定鍵的值不存在時返回默認值。該方法返回結果為指定鍵的值,如果值不在字典中,就返回默認值None。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>>print (’小萌的學號為: %s'%  student.get(’小萌’))
        小萌的學號為: 1001

由輸出結果看到,get方法使用起來比較簡單。再看如下示例:

        >>> st={}
        >>> print(st['name'])
        Traceback (most recent call last):
          File "<pyshell#166>", line 1, in <module>
            print(st['name'])
        KeyError: 'name'
        >>> print(st.get('name'))
        None
        >>> print('name的值為:%s' % st.get('name'))
        name的值為:None

由輸出結果看到,其他方法試圖訪問字典中不存在的項時會出錯,而使用get方法就不會。使用get方法訪問一個不存在的鍵時,返回None。這里可以自定義默認值,用于替換None,例如:

        >>> st={}
        >>> print('name的值為:%s' % st.get('name', ’未指定’))
        name的值為:未指定

由輸出結果看到,輸出結果中用“未指定”替代了None。

5.3.5 key in dict方法

Python字典in操作符用于判斷鍵是否存在于字典中,如果鍵在字典dict中就返回true,否則返回false。

該方法的語法如下:

key in dict

此語法中dict代表指定字典,key代表要在字典中查找的鍵。如果鍵在字典里就返回true,否則返回false。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>> print(’小萌在student字典中:%s'%(’小萌’ in student))
        小萌在student字典中:True
        >>> print(’小強在student字典中:%s'%(’小強’ in student))
        小強在student字典中:False

由輸出結果看到,已返回對應的True或False。

該方法是Python 3中的方法。在Python 2中有一個有相同功能的方法——has_key方法,has_key方法的使用方式和in不同。

5.3.6 items()方法

items()方法以列表返回可遍歷的(鍵,值)元組數組。

items()方法的語法如下:

dict.items()此語法中dict代表指定字典,該方法不需要參數。返回結果為可遍歷的(鍵/值)元組數組。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>> print(’調用items方法的結果:%s'% student.items())
        調用items方法的結果:dict_items([(’小萌’, '1001'), (’小智’, '1002')])

由輸出結果看到,返回結果為一個元組數組。

在Python 2中提供了一個iteritems方法,該方法和items方法的作用大致相同,但是iteritems方法返回的是一個迭代器對象,而不是列表。在Python 3中沒有iteritems方法。

5.3.7 keys()方法

keys()方法以列表返回一個字典所有鍵。

keys()方法的語法如下:

dict.keys()

此語法中dict代表指定字典,該方法不需要參數。返回結果為一個字典所有鍵。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>> print(’字典student所有鍵為:%s'% student.keys())
        字典student所有鍵為:dict_keys([’小萌’, ’小智’])

由輸出結果看到,返回的是一個元組數組,數組中包含字典所有鍵。

5.3.8 setdefault()方法

setdefault()方法和get()方法類似,用于獲得與給定鍵相關聯的值。如果鍵不存在于字典中,就會添加鍵并將值設為默認值。

setdefault()方法的語法如下:

dict.setdefault(key, default=None)

此語法中dict代表指定字典,key代表查找的鍵值,default代表鍵不存在時設置的默認鍵值。該方法沒有任何返回值。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>> print(’小強的鍵值為:%s'% student.setdefault(’小強’))
        小強的鍵值為:None
        >>> print(’小智的鍵值為:%s'% student.setdefault(’小智’))
        小智的鍵值為:1002
        >>> print('student字典新值為:%s'% student)
        student字典新值為:{’小強’: None, ’小萌’: '1001', ’小智’: '1002'}

由輸出結果看到,當鍵不存在時,setdefault方法返回默認值并更新字典;如果鍵存在,就返回與其對應的值,不改變字典。和get一樣,默認值可以選擇,如果不設定就使用None,如果設定就使用設定的值,例如:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>> print(’小強的鍵值為:%s'% student.setdefault(’小強’))
        小強的鍵值為:None
        >>> print(’小zhang的鍵值為:%s'% student.setdefault(’小zhang', '1006'))
        小zhang的鍵值為:1006

由輸出結果看到,小強沒有設置值,使用的是默認值,輸出鍵值為None;小zhang設置的默認值是1006,輸出鍵值為1006。

5.3.9 update()方法

update()方法用于把字典dict2的鍵/值對更新到dict里。

update()方法的語法如下:

dict.update(dict2)

此語法中dict代表指定字典,dict2代表添加到指定字典dict里的字典。該方法沒有任何返回值。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002'}
        >>> student2={’小李’:'1003'}
        >>> print(’原student字典為:%s'% student)
        原student字典為:{’小萌’: '1001', ’小智’: '1002'}
        >>> student.update(student2)
        >>> print(’新student字典為:%s'% student)
        新student字典為:{’小李’: '1003', ’小萌’: '1001', ’小智’: '1002'}
        >>> student3={’小李’:'1005'}
        >>>student.update(student3)  #對相同項覆蓋
        >>> print(’新student字典為:%s'% student)
        新student字典為:{’小李’: '1005', ’小萌’: '1001', ’小智’: '1002'}

由輸出結果看到,提供的字典中的項被添加到舊字典中,如果有相同的鍵就會覆蓋。

5.3.10 values()方法

values()方法以列表形式返回字典中所有值。與返回鍵的列表不同,返回的列表中可以包含重復的元素。

values()方法的語法如下:

dict.values()此語法中dict代表指定字典,該方法不需要參數。返回結果為字典中的所有值。

該方法使用示例如下:

        >>> student={’小萌’: '1001', ’小智’: '1002', ’小李’:'1001'}
        >>> print('student字典所有值為:%s'% list(student.values()))
        student字典所有值為:['1001', '1001', '1002']

由輸出結果看到,返回的列表中包含重復的元素。

主站蜘蛛池模板: 利津县| 土默特右旗| 长宁区| 全南县| 霍城县| 东山县| 乌什县| 临江市| 铜陵市| 罗江县| 纳雍县| 时尚| 绥棱县| 鄢陵县| 大英县| 宜宾市| 梅州市| 山阳县| 曲水县| 庄浪县| 渑池县| 南岸区| 南木林县| 石家庄市| 无极县| 临澧县| 诸暨市| 双城市| 同心县| 宜都市| 平顶山市| 岱山县| 丰城市| 仙居县| 福清市| 太白县| 无棣县| 遂溪县| 翁牛特旗| 海阳市| 赣州市|