目錄
字典(dictionary)
建立字典
清單1. 在Python 中建立字典,第1 部分
清單 2. 獲得關於字典(dictionary)的幫助
清單 3. 在 Python 中建立字典(dictionary),第 2 部分
清单 4. 访问 dictionary 中的元素
清单 5. 修改字典(dictionary)
清单 6. 异构的容器
用字典(dictionary)进行编程
清单 7. 一般关系操作符
清单 8. 条件测试和字典(dictionary)
清单 9. 迭代和字典(dictionary)
字典(dictionary):另一种强大的 Python 容器
首頁 後端開發 Python教學 Python字典容器介紹

Python字典容器介紹

Sep 19, 2017 am 10:11 AM
python 字典

字典(dictionary)

我們都曾經使用過語言字典來找出不認識的單字的定義。語言字典針對給定的單字(例如 python)提供一組標準的資訊。這種系統將定義和其他資訊與實際的單字關聯(映射)。使用單字作為鍵定位器來尋找感興趣的資訊。這個概念延伸到 Python 程式語言中,就成了特殊的容器類型,稱為 字典(dictionary)。

字典(dictionary) 資料型別在許多語言中都存在。它有時稱為關聯 數組(因為資料與一個鍵值相關聯),或作為散列表。但是在 Python 中,字典(dictionary) 是一個很好的對象,因此即使是程式設計新手也很容易在自己的程式中使用它。根據正式的說法,Python 中的 字典(dictionary) 是一種異質的、易變的映射容器資料類型。

建立字典

本系列中前面的文章介紹了 Python 程式語言中的一些容器資料類型,包括 tuple、string 和 list(請參閱 參考資料)。這些容器的相似之處是它們都是基於序列的。這意味著要根據元素在序列中的位置存取這些集合中的元素。所以,給定一個名為 a 的序列,就可以使用數字索引(例如 a[0] )或片段(例如 a[1:5])來存取元素。 Python 中的 字典(dictionary) 容器類型與這三種容器類型的不同之處在於,它是一個無序的集合。不是按照索引號,而是使用鍵值來存取集合中的元素。這意味著構造字典(dictionary)容器比 tuple、string 或 list 要複雜一些,因為必須同時提供鍵和對應的值,如清單 1 所示。

清單1. 在Python 中建立字典,第1 部分

>>> d = {0: 'zero', 1: 'one', 2 : 'two', 3 : 'three', 4 : 'four', 5: 'five'}
>>> d
{0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}
>>> len(d)
>>> type(d)     # Base object is the dict class
<type &#39;dict&#39;>
>>> d = {}      # Create an empty dictionary
>>> len(d)
>>> d = {1 : &#39;one&#39;} # Create a single item dictionary
>>> d
{1: &#39;one&#39;}
>>> len(d)
>>> d = {&#39;one&#39; : 1} # The key value can be non-numeric
>>> d
{&#39;one&#39;: 1}
>>> d = {&#39;one&#39;: [0, 1,2 , 3, 4, 5, 6, 7, 8, 9]}
>>> d
{&#39;one&#39;: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}
登入後複製

如這個例子所示,在Python 中建立字典(dictionary)要使用花括號和以冒號分隔的鍵-值組合。如果沒有提供鍵-值組合,那麼就會建立一個空的 dictionary。使用一個鍵-值組合,就會建立具有一個元素的 dictionary,以此類推,直到您需要的任何規模。與任何容器類型一樣,可以使用內建的 len 方法來找出集合中元素的數量。

前面的範例也示範了關於字典(dictionary)容器的另一個重要問題。鍵並不限制為整數;它可以是任何不易變的資料類型,包括 integer、float、tuple 或 string。因為 list 是易變的,所以它不能作為字典(dictionary)中的鍵。但是字典(dictionary)中的值可以是任何資料類型的。

最後,這個範例說明了 Python 中字典(dictionary)的底層資料型別是 dict 物件。若要進一步了解如何使用 Python 中的 字典(dictionary),可以使用內建的幫助解釋器來了解 dict 類,如清單 2 所示。

清單 2. 獲得關於字典(dictionary)的幫助

>>> help(dict)on class dict in module __builtin__:
   dict(object)
| dict() -> new empty dictionary.
| dict(mapping) -> new dictionary initialized from a mapping object&#39;s
|   (key, value) pairs.
| dict(seq) -> new dictionary initialized as if via:
|   d = {}
|   for k, v in seq:
|     d[k] = v
| dict(**kwargs) -> new dictionary initialized with the name=value pairs
|   in the keyword argument list. For example: dict(one=1, two=2)
| 
| Methods defined here:
| 
| __cmp__(...)
|   x.__cmp__(y) <==> cmp(x,y)
| 
| __contains__(...)
|   x.__contains__(y) <==> y in x
| 
| __delitem__(...)
|   x.__delitem__(y) <==> del x[y]
...
登入後複製

關於 dict 類別的幫助指出,可以使用建構子直接建立字典(dictionary),而不使用花括號。既然與其他容器資料類型相比,在創建字典(dictionary)時必須提供更多的數據,那麼這些創建方法比較複雜也就不足為奇了。但是,在實務上使用字典(dictionary)並不難,如清單 3 所示。

清單 3. 在 Python 中建立字典(dictionary),第 2 部分

>>> l = [0, 1,2 , 3, 4, 5, 6, 7, 8, 9] 
>>> d = dict(l)(most recent call last):
 File "<stdin>", line 1, in ?: can&#39;t convert dictionary 
 update sequence element #0 to a sequence
  
>>> l = [(0, &#39;zero&#39;), (1, &#39;one&#39;), (2, &#39;two&#39;), (3, &#39;three&#39;)]
>>> d = dict(l)
>>> d
{0: &#39;zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;}
>>> l = [[0, &#39;zero&#39;], [1, &#39;one&#39;], [2, &#39;two&#39;], [3, &#39;three&#39;]]
>>> d
{0: &#39;zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;}
>>> d = dict(l)
>>> d
{0: &#39;zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;}
>>> d = dict(zero=0, one=1, two=2, three=3) 
>>> d
{&#39;zero&#39;: 0, &#39;three&#39;: 3, &#39;two&#39;: 2, &#39;one&#39;: 1}
>>> d = dict(0=zero, 1=one, 2=two, 3=three): keyword can&#39;t be an expression
登入後複製

可以看到,建立字典(dictionary)需要鍵值和資料值。第一次從 list 建立字典(dictionary)的嘗試失敗了,這是因為沒有匹配的鍵-資料值對。第二和第三個範例示範如何正確地建立字典(dictionary):在第一種情況下,使用一個list,其中的每個元素都是一個tuple;在第二種情況下,也使用一個list,但是其中的每個元素是另一個list。在這兩種情況下,內層容器都用於獲得鍵到資料值的對應。

直接建立 dict 容器的另一個方法是直接提供鍵到資料值的對應。這種技術允許明確地定義鍵和與其對應的值。這個方法其實用處不大,因為可以用花括號完成相同的任務。另外,如前面的例子所示,在採用這種方式時對於鍵不能使用數字,否則會導致拋出一個異常。

存取和修改字典(dictionary)

在建立了 dictionary 之後,需要存取其中包含的資料。存取方式與存取任何 Python 容器資料類型中的資料相似,如清單 4 所示。

清单 4. 访问 dictionary 中的元素

>>> d = dict(zero=0, one=1, two=2, three=3)
>>> d
{&#39;zero&#39;: 0, &#39;three&#39;: 3, &#39;two&#39;: 2, &#39;one&#39;: 1}
>>> d[&#39;zero&#39;]
>>> d[&#39;three&#39;]
>>> d = {0: &#39;zero&#39;, 1: &#39;one&#39;, 2 : &#39;two&#39;, 3 : &#39;three&#39;, 4 : &#39;four&#39;, 5: &#39;five&#39;}
>>> d[0]
&#39;zero&#39;
>>> d[4]
&#39;four&#39;
>>> d[6](most recent call last):
 File "<stdin>", line 1, in ?: 6
>>> d[:-1](most recent call last):
 File "<stdin>", line 1, in ?: unhashable type
登入後複製

可以看到,从字典(dictionary)中获取数据值的过程几乎与从任何容器类型中获取数据完全一样。在容器名后面的方括号中放上键值。当然,字典(dictionary)可以具有非数字的键值,如果您以前没有使用过这种数据类型,那么适应这一点需要些时间。因为在字典(dictionary)中次序是不重要的(dictionary 中数据的次序是任意的),所以可以对其他容器数据类型使用的片段功能,对于 字典(dictionary)是不可用的。试图使用片段或者试图从不存在的键访问数据就会抛出异常,指出相关的错误。

Python 中的字典(dictionary)容器也是易变的数据类型,这意味着在创建它之后可以修改它。如清单 5 所示,可以添加新的键到数据值的映射,可以修改现有的映射,还可以删除映射。

清单 5. 修改字典(dictionary)

>>> d = {0: &#39;zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;}
>>> d[0]
&#39;zero&#39;
>>> d[0] = &#39;Zero&#39;
>>> d
{0: &#39;Zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;}
>>> d[4] = &#39;four&#39;
>>> d[5] = &#39;five&#39;
>>> d
{0: &#39;Zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;, 4: &#39;four&#39;, 5: &#39;five&#39;}
>>> del d[0]
>>> d
{1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;, 4: &#39;four&#39;, 5: &#39;five&#39;}
>>> d[0] = &#39;zero&#39;
>>> d
{0: &#39;zero&#39;, 1: &#39;one&#39;, 2: &#39;two&#39;, 3: &#39;three&#39;, 4: &#39;four&#39;, 5: &#39;five&#39;}
登入後複製

清单 5 演示了几个重点。首先,修改数据值是很简单的:将新的值分配给适当的键。其次,添加新的键到数据值的映射也很简单:将相关数据分配给新的键值。Python 自动进行所有处理。不需要调用 append 这样的特殊方法。对于 dictionary 容器,次序是不重要的,所以这应该好理解,因为不是在字典(dictionary)后面附加映射,而是将它添加到容器中。最后,删除映射的办法是使用 del 操作符以及应该从容器中删除的键。

在清单 5 中有一个情况看起来有点儿怪,键值是按照数字次序显示的,而且这个次序与插入映射的次序相同。不要误解 —— 情况不总是这样的。Python 字典(dictionary)中映射的次序是任意的,对于不同的 Python 安装可能会有变化,甚至多次使用同一 Python 解释器运行相同代码也会有变化。如果在一个字典(dictionary)中使用不同类型的键和数据值,那么就很容易看出这一点,如清单 6 所示。

清单 6. 异构的容器

>>> d = {0: &#39;zero&#39;, &#39;one&#39;: 1}   
>>> d
{0: &#39;zero&#39;, &#39;one&#39;: 1}
>>> d[0]
&#39;zero&#39;
>>> type(d[0])
<type &#39;str&#39;>
>>> d[&#39;one&#39;]
>>> type(d[&#39;one&#39;])
<type &#39;int&#39;>
>>> d[&#39;two&#39;] = [0, 1, 2] 
>>> d
{0: &#39;zero&#39;, &#39;two&#39;: [0, 1, 2], &#39;one&#39;: 1}
>>> d[3] = (0, 1, 2, 3)
>>> d
{0: &#39;zero&#39;, 3: (0, 1, 2, 3), &#39;two&#39;: [0, 1, 2], &#39;one&#39;: 1}
>>> d[3] = &#39;a tuple&#39;
>>> d
{0: &#39;zero&#39;, 3: &#39;a tuple&#39;, &#39;two&#39;: [0, 1, 2], &#39;one&#39;: 1}
登入後複製

如这个例子所示,可以在一个字典(dictionary)中使用不同数据类型的键和数据值。还可以通过修改字典(dictionary)添加新的类型。最后,产生的 dictionary 的次序并不与插入数据的次序匹配。本质上,字典(dictionary)中元素的次序是由 Python 字典(dictionary)数据类型的实际实现控制的。新的 Python 解释器很容易改变这一次序,所以一定不要依赖于元素在字典(dictionary)中的特定次序。

用字典(dictionary)进行编程

作为正式的 Python 数据类型,字典(dictionary)支持其他较简单数据类型所支持的大多数操作。这些操作包括一般的关系操作符,比如 <、> 和 ==,如清单 7 所示。

清单 7. 一般关系操作符

>>> d1 = {0: &#39;zero&#39;}
>>> d2 = {&#39;zero&#39;:0}
>>> d1 < d2
>>> d2 = d1
>>> d1 < d2
>>> d1 == d2
>>> id(d1)
>>> id(d2)
>>> d2 = d1.copy()
>>> d1 == d2
>>> id(d1)
>>> id(d2)
登入後複製

前面的示例创建两个字典(dictionary)并使用它们测试 < 关系操作符。尽管很少以这种方式比较两个字典(dictionary);但是如果需要,可以这样做。

然后,这个示例将赋值给变量 d1 的字典(dictionary)赋值给另一个变量 d2。注意,内置的 id() 方法对于 d1 和 d2 返回相同的标识符值,这说明这不是复制操作。要想复制字典(dictionary) ,可以使用 copy() 方法。从这个示例中的最后几行可以看出,副本与原来的字典(dictionary)完全相同,但是容纳这字典(dictionary)的变量具有不同的标识符。

在 Python 程序中使用字典(dictionary)时,很可能希望检查字典(dictionary)中是否包含特定的键或值。如清单 8 所示,这些检查很容易执行。

清单 8. 条件测试和字典(dictionary)

>>> d = {0: &#39;zero&#39;, 3: &#39;a tuple&#39;, &#39;two&#39;: [0, 1, 2], &#39;one&#39;: 1}
>>> d.keys()
[0, 3, &#39;two&#39;, &#39;one&#39;]
>>> if 0 in d.keys():
...   print &#39;True&#39;
... 
>>> if &#39;one&#39; in d:
...   print &#39;True&#39;
... 
>>> if &#39;four&#39; in d:
...   print &#39;Dictionary contains four&#39;
... elif &#39;two&#39; in d:
...   print &#39;Dictionary contains two&#39;
... contains two
登入後複製

测试字典(dictionary)中键或数据值的成员关系是很简单的。dictionary 容器数据类型提供几个内置方法,包括 keys() 方法和 values() 方法(这里没有演示)。这些方法返回一个列表,其中分别包含进行调用的字典(dictionary)中的键或数据值。

因此,要判断某个值是否是字典(dictionary)中的键,应该使用 in 操作符检查这个值是否在调用 keys() 方法所返回的键值列表中。可以使用相似的操作检查某个值是否在调用 values() 方法所返回的数据值列表中。但是,可以使用字典(dictionary)名作为简写表示法。这是有意义的,因为一般希望知道某个数据值(而不是键值)是否在字典(dictionary)中。

在 “Discover Python, Part 6” 中,您看到了使用 for 循环遍历容器中的元素是多么容易。同样的技术也适用于 Python 字典(dictionary),如清单 9 所示。

清单 9. 迭代和字典(dictionary)

>>> d = {0: &#39;zero&#39;, 3: &#39;a tuple&#39;, &#39;two&#39;: [0, 1, 2], &#39;one&#39;: 1}
>>> for k in d.iterkeys():
...   print d[k]
... tuple
[0, 1, 2]
>>> for v in d.itervalues():
...   print v
... tuple
[0, 1, 2]
>>> for k, v in d.iteritems():
...   print &#39;d[&#39;,k,&#39;] = &#39;,v
... [ 0 ] = zero[ 3 ] = a tuple[ two ] = [0, 1, 2][ one ] = 1
登入後複製

这个示例演示了遍历字典(dictionary)的三种方式:使用从 iterkeys()、itervalues() 或 iteritems() 方法返回的 Python 迭代器。(顺便说一下,可以通过在字典(dictionary)上直接调用适当方法,比如 d.iterkeys(),从而检查这些方法是否返回一个迭代器而不是容器数据类型。)iterkeys() 方法允许遍历字典(dictionary)的键,而 itervalues() 方法允许遍历字典(dictionary)包含的数据值。另一方面,iteritems() 方法允许同时遍历键到数据值的映射。

字典(dictionary):另一种强大的 Python 容器

本文讨论了 Python 字典(dictionary)数据类型。字典(dictionary)是一种异构的、易变的容器,依赖键到数据值的映射(而不是特定的数字次序)来访问容器中的元素。访问、添加和删除字典(dictionary)中的元素都很简单,而且字典(dictionary)很容易用于复合语句,比如 if 语句或 for 循环。可以在字典(dictionary)中存储所有不同类型的数据,可以按照名称或其他复合键值(比如 tuple)访问这些数据,所以 Python 字典(dictionary)使开发人员能够编写简洁而又强大的编程语句。

以上是Python字典容器介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles