『Python基礎-10』字典

『Python基礎-10』字典


目錄: 1.字典基本概念 2.字典鍵(key)的特性 3.字典的建立 4-7.字典的增刪改查 8.遍歷字典html


1. 字典的基本概念

  • 字典一種key - value 的數據類型
  • Python字典是另外一種可變容器模型,且可存儲任意類型對象,如字符串、數字、元組等其餘容器模型。
  • Python字典可存儲任意類型對象,如字符串、數字、元組、列表…… 優勢:取值方便,速度快
  • 每一個鍵與其值使用一個冒號(key:value; key:value; .......)分開,這些鍵-值對是使用逗號分隔的,整個字典項目用大括號括起來。
  • 空字典: 沒有任何項目的空字典只用兩個花括號寫成:{}
  • 鍵在字典中是惟一的,而值能夠沒必要是惟一的。字典的值能夠是任何類型的,可是鍵必須是不可變的數據類型,例如字符串,數字或元組。

</br>python

2.字典鍵的特性

字典值能夠沒有限制地取任何python對象,既能夠是標準的對象,也能夠是用戶定義的,但鍵不行。編程

兩個重要的點須要記住:數組

1)不容許同一個鍵出現兩次。建立時若是同一個鍵被賦值兩次,後一個值會被記住,以下實例:
dict1 = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
print ("dict1['Name']: ", dict1['Name'])

輸出結果:dict1['Name']: Manni數據結構

2)鍵必須不可變,因此能夠用數,字符串或元組充當,因此用列表就不行,以下實例:
dict1 = {['Name']: 'Zara', 'Age': 7};
print ("dict1['Name']: ", dict1['Name'])

輸出結果:dict1 = {['Name']: 'Zara', 'Age': 7}; TypeError: unhashable type: 'list' unhashable,不可哈希, 若是咱們簡單點理解,某數據「不可哈希」(unhashable)就是其可變,如list/dict,都能原地修改,就是unhashable。可改變的數據結構 :字典dict,列表list,集合set. 字典也被稱做關聯數組或哈希表.函數

</br>spa

3. 建立字典

3.1) 直接賦值建立

字典由鍵(key)和對應值(value)成對組成。字典也被稱做關聯數組或哈希表。基本語法以下:.net

dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} #建立字典dict1

建立空字典:

使用字典來存儲用戶提供的數據或在編寫能自動生成大量鍵—值對的代碼時,一般都須要先 定義一個空字典:code

dict1 = {}

注意: -每一個鍵與值用冒號隔開(:),每對用逗號,每對用逗號分割,總體放在花括號中({})。 -鍵必須獨一無二,但值則沒必要。 -值能夠取任何數據類型,但必須是不可變的,如字符串,數組或元組。htm

3.2) 經過關鍵字dict和關鍵字參數建立

Python裏有一個內建關鍵字dict, 能夠直接使用這個關鍵字建立字典.

StuIfo = dict(name = "xiao ming",age = 12)
print(StuIfo,type(StuIfo))

運行結果:{'name': 'xiao ming', 'age': 12} <class 'dict'>

3.3) 經過二元組列表建立

list1 = [('Iphone',6999),('xiaomi',1999)]
phoneprice = dict(list1)
print(list1)
print(phoneprice,type(phoneprice))

運行結果:

[('Iphone', 6999), ('xiaomi', 1999)]
{'Iphone': 6999, 'xiaomi': 1999} <class 'dict'>

3.4) 經過dict和zip結合建立

dict3 = dict(zip('python',[1,2,3,4,5,6]))
print(dict3,type(dict))

運行結果: {'p': 1, 'y': 2, 't': 3, 'h': 4, 'o': 5, 'n': 6} <class 'type'> zip函數能夠把兩個對象結合在一塊兒

</br>

4. 增: 給字典增長元素

4.1) 直接賦值來增長元素

字典是一種動態結構,可隨時在其中添加鍵—值對。要添加鍵—值對,可依次指定字典名、用 方括號括起的鍵和相關聯的值。 格式: 字典變量名['鍵(key)'] = 數據(value)

dict1 = {'color': 'green', 'points': 5}   #原列表
dict1['x_position'] = 0     #添加鍵值對:'x_position': 0
dict1['y_position'] = 55    #添加鍵值對: 'y_position': 55
print(dict1)

運行結果:{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 55} [注意]:鍵—值對的排列順序與添加順序不一樣。Python不關心鍵—值對的添加順序, 而只關心鍵和值之間的關聯關係。

4.2) 用方法.update添加合併兩個

利用一個字典項更新另外一個字典。將一個字典裏的項添加到另外一個字典裏,若兩個字典裏有相同的鍵,則更新其鍵對應的值。 語句:dict1.update(dict2)

dict4 = {"name":"xiao hong","age":12}
dict5 = {"class":1, "grade":3}
dict4.update(dict5)
print(dict4)
print(dict5)

運行結果:

{'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
{'class': 1, 'grade': 3}   # 這個字典仍是存在的

</br>

5. 刪: 刪除字典元素或字典

能夠刪除單個字典元素或清除字典的所有內容。也能夠在單個操做中刪除整個字典。

5.1) 使用del語句刪除元素,或整個字典

要顯式的刪除某個元素或整個字典,只需使用del語句。 使用del語句後,再訪問被刪除的元素或字典,引起一個異常,由於用del後該元素或字典再也不存在:

dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
del dict1['speed']
print(dict1['speed'])    #運行後報錯:KeyError: 'speed'
print(dict1)   

dict2 = {"name":"xiao hong","age":12}
del dict2
print(dict2)  #運行後報錯:NameError: name 'dict2' is not defined

運行結果:

KeyError: 'speed'
{'x_position': 0, 'y_position': 25}
NameError: name 'dict2' is not defined

5.2) 使用方法.clear()清空字典

移除字典裏全部 items 。不接受任何參數,返回值爲 None 。 再訪問清空後的字典,會返回空字典. 使用 : 字典名.clear()

dict2 = {"name":"xiao hong","age":12}
result = dict2.clear()
print(result)    #返回none
print(dict2)    #返回空字典

運行結果:

None
{}

5.3) 使用方法.pop來刪除指定元素, 會返回被刪除的key所對應的值.

移除字典數據pop()方法的做用是:刪除指定給定鍵所對應的值,返回這個值並從字典中把它移除。 若指定鍵不存在,一種狀況程序會報錯,另外一種狀況能夠指定一個值做爲返回值。 [注意]字典pop()方法與列表pop()方法做用徹底不一樣。

dict2 = {"name":"xiao hong","age":12,'class': 1, 'grade': 3}
result1 = dict2.pop("age")   #返回被刪除的,age對應的值12
result2 = dict2.pop("age")   #再次調用上次被pop刪除的鍵值對, 直接打印輸出,會報錯. 運行後: result2 = dict2.pop("age"),KeyError: 'age'
result3 = dict2.pop("age","key didn't found") # 在指定key後,再指定一個該key不存在時的返回值,會返回這個設定值.            運行後:key didn't found
print(result1)
print(result2)
print(result3)
print(dict2)

運行結果:

12    #print(result1)
result2 = dict2.pop("age"),KeyError: 'age'   #print(result2)
key didn't found         #print(result3)
{'name': 'xiao hong', 'class': 1, 'grade': 3}    #print(dict2)

5.4) 使用popitem()方法隨機拋出一對鍵值對,並返回值. 不接受任何參數.

Python 字典 popitem() 方法隨機返回並刪除字典中的一對鍵和值(通常刪除末尾對)。 與列表的 pop 方法相似,但與之不一樣的是,因爲字典是無序的,故是隨機以(鍵,值)的形式拋出,而且返回(鍵,值)。不接受任何參數。 若是字典已經爲,卻調用了此方法,就報出KeyError異常

dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
result1 = dict1.popitem()
print(result1)

運行結果:('speed', 'medium')

</br>

6. 改: 修改字典內的元素

  • 經過關鍵字訪問對應的值,而後從新賦值, 即爲修改字典元素.
  • 字典是可變對象,支持原處修改,也就是ID不變
dict4 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
dict4['class']=2  #更改鍵值對class:1爲class:2
print(dict4)

運行結果: {'name': 'xiao hong', 'age': 12, 'class': 2, 'grade': 3}

<br/>

7. 查: 查詢(訪問)字典

  • Python內置的字典類型,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度。
  • 字典能夠像列表使用索引同樣訪問,可是字典使用的鍵,而非索引, 字典沒有索引
  • 字典是可變對象,支持原處修改,也就是ID不變
dict1 = {'Name': 'Zara', 'Age': 7, `Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

運行結果:

dict['Name']:  Zara
dict['Age']:  7

[注意]若是用字典裏沒有的鍵訪問數據,會報錯. 可使用.get方法,不會報錯,會返回None,也能夠指定返回值

</br>

8. 遍歷字典

8.1) 遍歷字典,只取[key]

  • for循環字典,默認遍歷的是字典的key:

    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    for i in dict1:
        print(i)

    運行結果是:name age class grade

  • 也能夠經過內置方法.keys()來遍歷字典,遍歷字典裏全部的key.

    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    for key in dict1.keys():
        print(key)

    運行結果同上.

8.2) 遍歷字典, 只取[value]

  • 遍歷全部的value值,須要使用Python的內置方法.values()
    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    for x in dict1.values():
        print(x)

運行結果:xiao hong 12 1 3

8.3) 遍歷字典, [key]值和[value]值都取

  • 1.先使用方法.items()獲取一個列表,這個列表內的放的元素,存的是元祖形式的原字典的鍵值對.
  • 2.遍歷這個列表,拿到可字典的key和value
    dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    result = dict1.items()
    #print(result)          #print(result)運行結果:dict_items([('name', 'xiao hong'), ('age', 12), ('class', 1), ('grade', 3)])
    for key,value in result:       #key接收元祖裏的第一個值,value接收元祖例的第二個值
    print(key,value)

8.4) 利用enumerate和下標控制遍歷

  • enumerate()是python的內置函數,在字典上是枚舉、列舉的意思

  • enumerate能夠獲取遍歷每一項的下標

  • 這樣咱們能夠控制我遍歷過程,可能有的時候不須要全遍歷,能夠利用它中斷遍歷

    dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
    for index, key in enumerate(dict1):
    if index == 2:
        break
    print(key)   
    
    print("-------這是一條分隔線-----------------")
    
    for index,value in enumerate(dict1.values()):  #遍歷字典的value
    print(index,value)   #獲取位置下標和字典的value值

    運行結果:

    x_position
    y_position
    -------這是一條分隔線-----------------
    0 0
    1 25
    2 medium

</br> </br>

------------Python內置字典函數功能------------

編號 函數 描述
1 cmp(dict1, dict2) 在Python 3中再也不可用。
2 len(dict) 計算出字典的總長度。它將等於字典中的數據項數目。
3 str(dict) 生成字典的可打印字符串表示形式
4 type(variable) 返回傳遞變量的類型。若是傳遞變量是字典,那麼它將返回一個字典類型。

</br>

------------Python內置字典方法------------

python 3.x 中字典的方法一共 11 種,用命令 dir(dict) 查看。每種方法的使用也可用 help(dict.clear) 查看。

編號 函數 描述
1 dict.clear() 刪除字典dict的全部元素
2 dict.copy() 返回字典dict的淺拷貝
3 dict.fromkeys() 建立一個新的字典,其中包含seq的值和設置爲value的值。
4 dict.get(key, default=None) 對於鍵(key)存在則返回其對應值,若是鍵不在字典中,則返回默認值
5 dict.has_key(key) 此方法已刪除,使用in操做符代替
6 dict.items() 返回字典dict的(key,value)元組對的列表
7 dict.keys() 返回字典dict的鍵列表
8 dict.setdefault (key, default = None) 相似於get(),若是key不在字典dict中,則將執行賦值操做:dict [key] = default
9 dict.update(dict2) 將字典dict2的鍵值對添加到字典dict
10 dict.values() 返回字典dict的值列表

</br>

####[參考]:

####[擴展閱讀]:


謝謝閱讀!(#^.^#)

相關文章
相關標籤/搜索