當前位置:
首頁 > 最新 > Python基礎知識系列——字典

Python基礎知識系列——字典

00 寫在前面

各位大大好,又到了新的一期文章更新之時,當然也又是一個周末來臨時,小編在這裡祝願所有朋友都能夠有一個開心愉快的周末時光。上一期文章中,小編講解了怎麼使用Python去開發一個裁剪PDF文件的App,但是因為文章在排版過程中出現了一些故障,使得最終通過手機閱讀文章存在一定的不便(主要是Python代碼閱讀的不便),在這裡,小編要先向各位朋友道一聲歉,雖然小編不能保證以後不會出現這種情況(小編一直在摸索怎麼更好的進行微信文章的排版,所以總會路遇坎坷),但是小編會盡量使得以後的文章少出現一些此類問題。這一期文章中,小編將繼續Python基礎知識的講解,將重點講解Python中的字典對象。本期文章的寫作框架包含四部分:字典介紹、字典的創建和使用以及字典的常用方法三部分。好了,現在讓我們進入主題。

01 字典——唯一的Python映射對象

先前文章中介紹的各種序列對象存在一個共同特徵,就是引用時是通過索引編號來進行的,這就使得這些序列對象必須是按照一定的順序進行組織,但是現實中,並不是所有數據都是這種組織形式,一些數據的引用要求能夠根據名稱來讀取數據值,是不是很像數學中的函數,沒錯,這種引用方式就是映射(mapping),Python中就唯一存在著這樣一種對象,那就是字典。

那麼這種Python對象為什麼叫做字典呢?相信大家應該還記得新華字典的用法吧,在字典中如果需要查找一個漢字的意思,那麼你肯定是按照字到含義的順序去進行的吧,而Python中的這種對象引用方式就是這樣,所以很簡單地通過字面意思將這種對象命名為字典,這裡你就應該再次感受到Python的簡潔了吧。

既然知道了字典含義,那麼不禁要問:為什麼要引入字典?這裡通過一個例子來解釋其必要。假如存在一個姓名列表names=["張三","李四","王五","趙六"],現在如果你想知道張三的電話號碼,那麼如果你採用列表的方式,那麼你首先要在再定義一個電話號碼列表phones=["0324","0934","1225","2354"](這裡的號碼是虛構的手機號碼後四位),並且你必須確保號碼存放的順序和姓名存放的順序一致。在創建完這個列表之後,你可以通過phones[name.index("張三")]這條命令獲得張三的電話號碼,雖然命令不是很長,但是真的很煩瑣不是嘛。你肯定會想,是否存在這樣一種命令方式phones["張三"]就可以得到張三的號碼呢?那這裡小編就可以很明確地告訴你,完全可以,只要你掌握了字典。小編來告訴你怎樣實現這一點,首先你只需要創建一個電話簿字典對象phonebooks={"張三":"0324","李四":"0934","王五": "1225","趙六":"2354"},然後你就可以通過phonebooks["張三"]來獲得張三的電話號碼了,就是這麼簡單,所以你現在應該知道為什麼要引入字典了吧,字典的存在就是為了解決索引無法進行或者是通過索引進行不便的情形。

02 字典的創建與使用

既然知道了Python字典引入的必要,那麼下面小編就介紹一些字典的創建以及使用。Python中字典的創建存在兩種方法:{}以及使用函數dict()。小編分別對其進行說明。

1. 使用{}創建字典

上文中其實已經指出了怎麼使用這種方式進行字典的創建,這裡還是採用上文中的那個例子來進行說明。通過{}創建字典都是以下面這種方式:

phonebooks={"張三":"0324","李四":"0934","王五": "1225","趙六":"2354"}

字典由鍵及其相應的值組成,這種鍵-值對稱為項(item)。在這個示例中,鍵為名字,而值為電話號碼。每個鍵與其值之間都用冒號(:)分隔,項之間用逗號分隔,而整個字典放在花括弧內。

2. 使用函數dict()創建字典

通過dict()創建字典的過程中,你既可以通過dict()作用到鍵-值類型的序列,也可以通過賦予dict()函數關鍵字實參來創建字典。如果你現在具有一個鍵-值對的序列對象:

items = [("name","張三"),("age","42")]

只需要使用dict(items)便可以得到{"name":"張三","age","42"}這樣一個字典。

另外也可以通過對dict()函數賦予關鍵字實參進而創建字典:

Dict = dict(name="張三",age=42)

知道了怎麼創建字典,接下來就要學會使用字典。這一部分首先介紹一些字典之中的基本操作方法(主要是與列表對比),下一部分介紹一些較為常用的字典操作方法。字典的基本操作在很多方面與列表類似:

len函數,用在列表中統計元素個數;用在字典中統計字典中項的數目;

Dict[k],用來返回字典中間為k的值;

Dict[k]=v,將值v關聯給字典中的鍵k;

del Dict[k],刪除字典中的鍵k以及相應的值

k in Dict,用於檢查字典中是否存在鍵k

然而,絕對不要因為字典與列表的方法類似,就盲目地認為字典和列表相同。字典與列表還是存在一些不同之處的:

鍵的類型。字典中鍵的類型可以是整數,可以是非整數,甚至可以是各種字元,只要確保鍵的類型為不可變類型即可;但是列表之中的所以只能是整數,當然你會說可以對列表進行重新索引(朋友,我們這裡講的是默認,你和我扯高端操作,你不累嗎)

自動添加。列表操作中是不可能給列表中不存在的元素進行賦值的,但是字典中完全可以給不存在的鍵賦值。例如如果存在一個列表List=[1,2,3],那麼如果你想使用List[5]=4給List增加一項,Python只能給你一個白眼順便給你彈出一段錯誤;然後如果你具有一個字典Dict={"name":"張三"},你完全可以通過Dict["age"]=42給字典中增加一項。

成員資格的檢查。列表中通過使用in函數是檢查某個值是否存在於列表之中,但是字典中的in函數是檢查某一個鍵是否存在於字典之中。

對於字典的創建與使用就講到這裡,下面給出一個字典的相關程序例子。在下一部分筆者將講述一些字典中常用的方法。

# --------------代碼清單1:字典示例--------------------------#

""" Theme : 一個簡單的資料庫;

Author : liupu

"""

# 這裡創建一個嵌套字典,外層將人名用作鍵,然後對每一個人創建一個

# 字典,鍵分別為電話和地址

addressBook = {

"張三":{

"phone":"2345",

"Address":"九寨溝"

},

"李四":{

"phone":"9022",

"Address":"麗江古鎮"

},

"王五":{

"phone":"0233",

"Address":"古東瀑布"

}

}

# 電話號碼和地址的描述性標籤,以供列印輸出

labels = {"phone":"電話號碼","Address":"地址"}

name = input("請輸入需要查詢人的名字:")

needs = input("查詢其電話號碼(p)還是地址(a):")

if needs == "p": key = "phone"

if needs == "a": key = "Address"

if name in addressBook :

print("{}"s {} is {}".format(name,labels[key],addressBook[name][key]))

運行上述程序後應該會出現以下情況:

請輸入需要查詢人的名字:張三

查詢其電話號碼(p)還是地址(a):p

張三的電話號碼2345

03 字典常用方法

與其它Python內置類型相似,字典中也有很多方法,但是相對於列表和字元串,字典的方法使用頻率相對較低,但不得不說的確很有用,這裡小編就主要講解一下字典中常用的一些方法。

1. clear

方法clear用於刪除字典之中的所有項,此種刪除是對字典進行原地修改,並且不會返回結果。

Dict = {"name":"張三","age","42"}; Dict.clear(); Dict={}

2. copy

方法copy用於返回一個新字典,字典中包含的項與原來的字典完全相同,但是這種方法是形成了原來的字典的一個副本,因此對於新字典的任何操作都不會影響到原來的字典。

x = {"name":"張三","age":42} ; y = x.copy() ; y["addr"] = "鼓浪嶼"

x = {"name":"張三","age":42}; y = {"name":"張三","age":42,"addr":"鼓浪嶼"}

可以看出對於字典y增加了新的一項並不會影響字典x。

3. fromkeys

方法fromkeys創建一個新字典,其中包含指定的鍵,如果沒有賦予這些鍵相應的值,則相應的值默認為None。

[In] {}.fromkeys("name","age"} [Out] {"name":None,"age":None}

[In] dict.fromkeys("name","age") [Out] {"name":None,"age":None}

[In] dict.fromkeys(["name","age"],["張三",42]) [Out] {"name":"張三", "age":42}

4. get

get方法為引用字典中的鍵值提供了一種寬鬆的環境。如果你用常規的方法引用字典中的值,如果鍵不存在的話就會引發錯誤;但是如果你採用get方法引用的話,如果不存在某個鍵,會返回一個None值,當然你也可以通過為其指定默認值進而輸出。

>> Dict = {"name":"張三","age":42}

>> print(Dict["address"])

Traceback (most recent call last):

File "", line 1, in ?

KeyError: "address"

>> print(Dict.get("address"))

None

>> print(Dict.get("address","鼓浪嶼"))

"鼓浪嶼"

5. items

方法items用於返回一個包含所有字典項的列表,其中每一個元素都是鍵值對的形式,當然字典項在列表中的排序是隨意的。

>> Dict = {"name":"張三","age":42}; Dict.items()

[("name","張三"),("age",42)]

6. keys

方法keys用來返回一個字典中的所有鍵。與之相類似的另外一個字典方法是values,僅僅通過字面意思就知道這個方法是返回字典中的值所形成的列表。

[In] Dict.keys() [Out] ["name","age"]

7. pop

方法pop用於獲取與指定鍵所對應的值,並將這一鍵值對從字典中刪除。另外在字典中還有另外一個popitem方法,這一方法是在字典中隨意刪除一條項,有點類似於列表的pop方法,這裡不再贅述。

>> Dict = {"name":"張三","age":42}

>> Dict.pop("name")

"張三"

{"age",42"}

8. update

方法update使用一個字典中的項來更新另一個字典。

>> Dict = {"name":"張三","age":42}

>> newDict = {"name":"李四"}

>> Dict.update(newDict)

{"name":"李四","age":42}

9. format_map

在講解字元串的那期文章,小編介紹了可以通過format方法去進行字元串的格式設置,然後在字典中還存在另外一種更加簡單的方法用來實現字元串的格式設置,那就是format_map方法。

>> phone = {"張三":"0231","李四":"0342","王五":"2346"}

>> "張三的電話是是".format_map(phone)

張三的電話號碼是0231

>> "李四與王五的電話號碼分別是和".format_map(phone)

李四與王五的電話號碼分別是0342和2346

看到了嗎,這就是採用format_map方法的簡便之處,它不再需要你一定要寫出絕對引用,僅僅通過輸入字典,format_map便可以自動將其進行配對。

對於字典中的常用方法,小編就介紹到這裡吧,更多方法可以參見相關的Python書籍,還是按句話,請按需學習。

本期文章寫到這裡就告一段落了,本期文章中小編主要對Python內置結構中的字典和集合進行了介紹,尤其是對字典對象進行了介紹,通過介紹,熟悉額字典操作的基本概念以及常用方法。下一期文章中,筆者準備繼續介紹另外一項Python中的重要基礎知識——語句。下一期文章將介紹Python中的條件與循環語句,敬請期待!

end


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python新玩法!如何自己動手實現FaceID功能
想要學好Python開發技術 首先學會安裝Python

TAG:Python |