摘要:字典的創建字典可以通過或一對花括號創建一個空字典。方法是字典對象名稱加方括號括起來的鍵名,比如。空字典的長度是和類似于對列表的操作,不過這兩個函數檢驗的是字典的鍵。修改了字典并沒有重新獲取,但是已經反應了變化,多了返回值的對象,。
字典(dict, dictionary的簡寫)是Python中另一個非常重要的內置數據類型,是Python中映射類型(Mapping Type),它把“鍵”(key)映射到“值”(value),通過key可以快速找到value,它是一種“鍵值對”(key-value)數據結構。
“鍵”,可以是任意不可變的類型對象(可以做hash,即具有hash()和eq()方法的對象),通常是字符串和數字,同一個字典中鍵是唯一的。但不能是list,因為list可以通過索引、切片、append()和extend()方法改變其值。
“值”,可以是任何類型的數據。
字典可以通過dict()或一對花括號創建一個空字典:?d = {}。花括號內可以放用逗號,隔開的多個鍵值對,鍵值對用冒號:隔開:
In [1]: d1 = {} In [2]: d2 = dict() In [3]: d1 == d2 Out[3]: True In [4]: d3 = {"a": 1, "b": 2, "c": 3} In [5]: d3 Out[5]: {"a": 1, "b": 2, "c": 3} In [6]: d4 = {"a": 1, "a":2, "a":3} In [7]: d4 Out[7]: {"a": 3}
上面最后一個例子d4的初始化中,鍵都是"a",所以得到的字典只有一個鍵,它的值是最后一次賦值3.
dict()創建字典對象dict()無參數時生成空字典,也可以通過傳入參數進行初始化。傳入參數有兩種形式:
一種是,序列型數據list或tuple,它每個元素必須又含有兩個子元素,以滿足key-value對;
一種是,name=value形式的參數。
見下面的例子:
In [21]: d1 Out[21]: {"a": 1, "b": 2, "c": 3} In [22]: d2 = dict(a=1, b=2, c=3) In [23]: d2 Out[23]: {"a": 1, "b": 2, "c": 3}字典推導式(Dict Comprehension)
類似列表推導式,我們可以通過一個for循環表達式來創建一個字典:
In [10]: dd = {x: x*x for x in range(5)} In [11]: dd Out[11]: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
list不能做字典的key,但是可以做value:
In [12]: l1 = [1,2,3] In [13]: d = {"a": l1} In [14]: d = {l1: "a"} ---------------------- TypeError Traceback (most recent call last)Python字典(dict)的訪問in ----> 1 d = {l1: "a"} TypeError: unhashable type: "list"
(1)通過鍵訪問其值
列表可以通過其索引訪問元素,字典就是通過鍵訪問對應的值,形式類似列表那樣用方括號,只不過用“鍵”替代了“索引”。方法是字典對象名稱加方括號括起來的鍵名,比如:mydict["a"]。如果某個鍵不在字典對象中,通過方括號訪問就會報錯:
In [26]: myd = dict(a=1, b=2, c=3) In [27]: myd Out[27]: {"a": 1, "b": 2, "c": 3} In [28]: myd["a"] Out[28]: 1 In [29]: myd["e"] ------------------ KeyError Traceback (most recent call last)in ----> 1 myd["e"] KeyError: "e"
(2)通過get(key)方法訪問其值
給get()傳入鍵作為參數,就可以得到value,如果key不存在則返回None。
In [30]: myd.get("a") Out[30]: 1 In [31]: print(myd.get("e")) NonePython字典(dict)的更改
詳見下面的示例代碼:
In [32]: myd = dict(a=1, b=2, c=3) In [33]: myd["a"] = 9 # 改變某個鍵的值 In [34]: myd Out[34]: {"a": 9, "b": 2, "c": 3} In [35]: myd["e"] = 8 # 增加新的鍵值對 In [36]: myd Out[36]: {"a": 9, "b": 2, "c": 3, "e": 8} In [37]: del myd["e"] # 刪除某個鍵及其值 In [38]: myd Out[38]: {"a": 9, "b": 2, "c": 3} In [39]: myd.pop("c") # 刪除某個鍵及其值并得到其值 Out[39]: 3 In [40]: myd Out[40]: {"a": 9, "b": 2}Python字典(dict)相關的內置函數
Python內置了一些函數可以用于操作字典,它們是:
len()
返回字典的長度,是鍵的個數,也是值的個數,也是鍵值對的個數。空字典的長度是0
In [41]: len({"a":1, "b":2}) Out[41]: 2 In [42]: len({}) Out[42]: 0
any()和all()
類似于對列表、tuple的操作,不過這兩個函數檢驗的是字典的鍵(key)。
any(): 只要字典有一個鍵為True則返回True;
all(): 只有字典的所有鍵都為True才返回True;
In [45]: any({"": 1, 0: "abcd", False: 333}) Out[45]: False In [46]: all({"": 1, 0: "abcd", False: 333}) Out[46]: False In [47]: all({"a": 1, 0: "abcd", False: 333}) Out[47]: False In [48]: any({"a": 1, 0: "abcd", False: 333}) Out[48]: True In [49]: any({}) Out[49]: False In [50]: all({}) Out[50]: True
不過,空字典有意思,它沒有鍵卻認為是所有鍵都為True,all({})返回True。
sorted()
跟操作列表、tuple的效果一樣,它把字典的所有key當做一個列表(或元組)進行排序
In [51]: sorted({"a": 1, "c": 3, "b": 4}) Out[51]: ["a", "b", "c"]in 運算符
跟列表,元組一樣,in用來檢驗一個key是不是在字典中:
In [56]: "a" in {"a": 1, "c": 3, "b": 4} Out[56]: True In [57]: "3" in {"a": 1, "c": 3, "b": 4} Out[57]: False In [58]: "3" not in {"a": 1, "c": 3, "b": 4} Out[58]: True
遍歷字典:
In [59]: for key in {"a": 1, "c": 3, "b": 4}: ...: print(key) ...: a c bPython字典(dict)的內置方法:
(1)keys()
返回鍵(key)的view對象(類型是:dict_keys)。這個view對象可以動態查看字典內部的對象,當字典改變后,這個view對象也會反應變化。
Python 2時,返回的是list,現在是dict_keys。
In [76]: myd = dict(a=1, b=2, c=3) In [77]: kk = myd.keys() In [78]: type(kk) Out[78]: dict_keys In [79]: for k in kk: ...: print(k) ...: a b c In [80]: myd["e"] = 9 # 修改了字典 In [81]: for k in kk: # 并沒有重新獲取kk,但是kk已經反應了變化,多了e ...: print(k) ...: a b c e
(2)values()
返回值(value)的view對象,dict_values。
(3)items()
返回鍵值對(key-value)的view對象:dict_items
In [82]: vv = myd.values() In [83]: vv Out[83]: dict_values([1, 2, 3, 9]) In [84]: ii = myd.items() In [85]: ii Out[85]: dict_items([("a", 1), ("b", 2), ("c", 3), ("e", 9)])
(4)get(key)
獲取key對應的value,上面已經講到。
(5)clear()
清空一個字典
In [86]: myd.get("a") Out[86]: 1 In [87]: myd.get("x", 0) Out[87]: 0 In [88]: myd.clear() In [89]: myd Out[89]: {}
(6)copy()
在Python中,把列表,字典對象賦值給變量時,都是“淺拷貝”,即,變量指向了對象,原來的對象改變了,這個變量的值也會跟著變。而cop()函數是“深拷貝”,重新創造一個新對象賦值給變量,原來的對象的改變不影響新對象。
In [94]: d1 = {"a":1} In [95]: d2 = d1 # 淺拷貝 In [96]: d3 = d1.copy() # 深拷貝 In [97]: d1["a"] = 2 # 改變原來的字典 In [98]: d2 Out[98]: {"a": 2} # 淺拷貝的d2也跟著改變 In [99]: d3 Out[99]: {"a": 1} # 深拷貝的d3還是原來的值
(7)pop(key)
刪除key并返回它的值,上面已經講到。
(8)popitem()
返回一對鍵值:
In [105]: myd = dict(a=1, b=2, c=3) In [106]: myd.popitem() Out[106]: ("c", 3) In [107]: myd.popitem() Out[107]: ("b", 2)
(9)fromkeys()
通過一個序列來初始化字典:
In [109]: d = {} In [110]: d.fromkeys([1,2,3]) Out[110]: {1: None, 2: None, 3: None} In [111]: d.fromkeys([1,2,3], 0) Out[111]: {1: 0, 2: 0, 3: 0}
(10)update()
用一個字典來更新另一字典:
In [113]: d = d.fromkeys([1,2,3], 0) In [114]: d Out[114]: {1: 0, 2: 0, 3: 0} In [115]: d.update({1:10, 2:20}) In [116]: d Out[116]: {1: 10, 2: 20, 3: 0}總結
字典是Python中很重要的一個數據結構,也是Python內置的數據類型。今后的編程中會經常用到它,所以要熟練掌握它的各種操作。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43775.html
字典作為python中一個內置的數據機構,它其實和列表是一樣的,但是它又是沒有順序的,以鍵值的方式,用來存儲數據,那么,它的使用教程是什么呢?下文給大家做個解答。 一.什么是字典 字典作為Python的一個內置數據結構,和列表一樣都是可變序列的,但是它是無序的,以鍵值對的方式存儲數據。 二.創建字典 創建字典的兩種方式,一種使用{}另一種使用內置函數dict() #author:爪哇斗...
摘要:布爾值布爾值和布爾代數的表示完全一致,一個布爾值只有兩種值的數據類型可以通過內置的函數查詢,例如還可以用來判斷和的區別在于不會認為子類是一種父類類型。會認為子類是一種父類類型。基本功能是進行成員關系測試和刪除重復元素。 ...
摘要:易于維護的成功在于它的源代碼是相當容易維護的。可移植基于其開放源代碼的特性,已經被移植也就是使其工作到許多平臺。集合集合是由一個或數個形態各異的大小整體組成的,構成集合的事物或對象稱作元素或是成員。基本功能是進行成員關系測試和刪除重復元素。 ...
摘要:字典,這個東西你現在還用嗎隨著網絡的發展,用的人越來越少了。最早的名字叫伍記小字典,但未能編纂完成。新華字典由商務印書館出版。成為迄今為止世界出版史上最高發行量的字典。也被稱為關聯數組或哈希表。 字典,這個東西你現在還用嗎?隨著網絡的發展,用的人越來越少了。不少人習慣于在網上搜索,不僅有web版,乃至于已經有手機版的各種字典了。我曾經用過一本小小的《新華字典》。 《新華字典》是...
摘要:元組是靜態數組,它們不可變,且其內部數據一旦創建便無法改變。元組緩存于運行時環境,這意味著我們每次使用元組時無須訪問內核去分配內存。 以下是整理的JavaScript和python的基礎區別的整理: 字符串、列表、元組、字典、集合、函數 字符串 聲明一個字符串 python str = 123 str = 123 Tips: 如果是三個引號的話,那么在py中就是注釋的意思 ...
閱讀 2696·2023-04-25 21:26
閱讀 1514·2021-11-25 09:43
閱讀 1949·2019-08-30 15:52
閱讀 932·2019-08-30 14:05
閱讀 2614·2019-08-29 16:10
閱讀 414·2019-08-29 13:48
閱讀 1860·2019-08-29 12:47
閱讀 1299·2019-08-23 18:04