偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python編程:詳解內(nèi)置字典(dict)子類及應(yīng)用(一網(wǎng)打盡)

開發(fā) 前端
本文主要介紹了Python字典(dict)類相關(guān)的幾個內(nèi)置子類的應(yīng)用。這些直接相關(guān)的子類分別是OrderedDict、defaultdict、userDict等內(nèi)置子類。通過示例代碼和關(guān)聯(lián)描述,讓你更輕松掌握它們的應(yīng)用和基本規(guī)則。

前言

本主要介紹Python集合模塊中幾個字典類(dict)的內(nèi)置擴展子類的應(yīng)用場景和使用示例,還是結(jié)合代碼,讓你能“短平快”的來掌握這些跟dict直接關(guān)聯(lián)的子類——OrderedDict、defaultdict、userDict。

OrderedDict

Python集合模塊中的有序字典(OrderedDict)就像普通字典一樣,但是有一些與排序操作相關(guān)的額外功能。OrderedDict會記住鍵插入的順序?,F(xiàn)在它們變得不那么重要了,因為內(nèi)置的dict類獲得了記住插入順序的能力(這種新行為在Python 3.7中得到了保證,因此OrderedDict現(xiàn)在顯得不是那么重要了)。創(chuàng)建有序字典的常規(guī)格式:

import collections
ordDict = collections.OrderedDict([items]):

或者

from collections import OrderedDict
ordDict = OrderedDict([items]):

這樣就創(chuàng)建并返回dict子類的實例OrderedDict對象,該子類具有專門用于重新排列字典順序的方法。本文就來簡要介紹這些方法。

1)popitem(last=True):

有序字典的popitem()方法返回并刪一個(key,value)對。如果last為True,則以LIFO(后進先出)方式返回相應(yīng)的鍵值對;否則以FIFO(先進先出)順序返回。

2)move_to_end(key, last=True):

將現(xiàn)有鍵移動到有序字典的任意一端。如果last為True(默認(rèn)值),則將項移到右端;如果last為False,則移到開頭。如果key不存在會引發(fā)KeyError。

請看代碼:

假設(shè)我們刪除并重新插入相同的鍵到OrderedDict。它將把這個鍵放到末尾,以保持鍵的插入順序。示例如下:

運行結(jié)果如下:

刪除前的OrderedDict:
x X
y Y
z Z
插入后的OrderedDict:
y Y
z Z
x X

UserDict

UserDict類用作Python內(nèi)置字典(dict)對象的包裝器。對這個類的需求已經(jīng)部分被直接從dict繼承子類的能力所取代;但是,這個類更容易使用,因為底層字典可以作為屬性訪問。當(dāng)你希望使用一些修改過的或新功能創(chuàng)建自己的字典時,可使用UserDict。其使用格式如下:

import collections
userDict = collections.UserDict([initialdata])

或者

import collections
userDict = collections.UserDict([initialdata])

此類模擬字典,其實例的內(nèi)容保存在一個常規(guī)字典中,可以通過UserDict實例的data屬性訪問該字典。如果提供了initialdata,則用此初始化data內(nèi)容;注意,實例本身不會單獨保留對initialdata的引用(非獨占),是允許它用于其他目的。

除了支持映射的方法和操作之外,UserDict實例提供以下屬性:

1)data

一個用于存儲UserDict類內(nèi)容的真正字典。示例如下:

輸出結(jié)果如下:

{'name': 'Kevin Cui', 'age': 24}

假設(shè)我們想要定義一個支持加法操作的自定義字典對象(合并兩字典)。當(dāng)我們添加自定義字典的兩個實例時,我們希望得到一個包含兩個字典中所有元素的新字典。請記住,如果你試圖添加到Python中的常規(guī)字典,則會得到TypeError。讓我們在UserDict的幫助下實現(xiàn)它:

運行輸出結(jié)果如下:

{'x': 10, 'y': 20}

當(dāng)然,你還可以自己實現(xiàn)其它相關(guān)的自定義操作。

DefaultDict

Python中Dictionary類的一個常見問題是缺少鍵。當(dāng)試圖訪問字典中不存在的鍵時,將會得到一個KeyError異常。所以每當(dāng)你需要訪問字典中的元素時,你就必須處理這種情況。幸運的是,Python提供了DefaultDict類。它用于為不存在的鍵提供一些默認(rèn)值且不引發(fā)KeyError。

DefaultDict是內(nèi)置dict類的子類。它覆蓋一個方法并添加一個可寫實例變量。其余的功能與dict相同。使用格式如下:

import colloections
defaultDict = collections.defaultdict(default_factory=None, /[,…])

上述代碼返回一個新的類字典對象DefaultDict,它是內(nèi)置dict類的子類。

第一個參數(shù)為default_factory屬性提供初始值,默認(rèn)為None。所有剩下的參數(shù)都被當(dāng)作傳遞給dict構(gòu)造函數(shù)一樣對待,包括關(guān)鍵字參數(shù)。需要了解的是若提供該參數(shù),則須是可調(diào)用的。

DefaultDict對象除了支持標(biāo)準(zhǔn)的dict操作外,還支持以下方法屬性:

1)__missing__(key):

如果default_factory屬性為None,用鍵作為參數(shù)將引發(fā)一個KeyError異常。

如果default_factory不是None,則不帶參數(shù)調(diào)用它,則為給定的鍵提供默認(rèn)值,該值被插入到鍵的字典中并返回。

2)default_factory

DefaultDict對象支持default_factory實例變量。該屬性由__missing__()方法使用。如果存在,則從構(gòu)造函數(shù)的第一個參數(shù)開始初始化;如果不存在,則初始化為None。

運行程序輸出結(jié)果為:

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

在上述代碼中,我們使用列表類型作為default_factory,更易于將包含鍵值序列對的列表組成字典。當(dāng)?shù)谝淮斡龅矫總€鍵時,它還不在映射中,因此使用default_factory函數(shù)自動創(chuàng)建一個條目,該函數(shù)返回一個空列表。然后list.append()操作將值連接到新列表。當(dāng)再次遇到鍵時,查找正常進行(返回該鍵的列表),然后list.append()操作將另一個值添加到列表中。這種技術(shù)比使用dict.setdefault()的等效技術(shù)要簡單得多。

我們再看一個示例:

輸出結(jié)果如下:

[('a', 2), ('c', 1), ('g', 2), ('h', 1), ('i', 1), ('j', 1), ('n', 2)]

在上面代碼中,我們將default_factory設(shè)置為int。這使得defaultdict用于計數(shù)(就像其他語言中的bag或multiset)。

當(dāng)?shù)谝淮斡龅侥硞€字母時,它就在映射中是不存在的,因此default_factory函數(shù)調(diào)用int()來提供一個默認(rèn)的0計數(shù)。然后遞增操作為每個字母建立計數(shù)。

提示:這里傳遞的int()函數(shù)默認(rèn)返回的是整數(shù)0。若想返回任意值,可以自定義個一個基于lambda的常量函數(shù)。示例代碼如下:

一言以蔽之:使用DefaultDict的好處就是可以避免KeyError異常,并進行一些可能的特定處理。

本文小結(jié)

本文主要介紹了Python字典(dict)類相關(guān)的幾個內(nèi)置子類的應(yīng)用。這些直接相關(guān)的子類分別是OrderedDict、defaultdict、userDict等內(nèi)置子類。通過示例代碼和關(guān)聯(lián)描述,讓你更輕松掌握它們的應(yīng)用和基本規(guī)則。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2024-04-26 00:25:52

Rust語法生命周期

2021-08-05 06:54:05

流程控制default

2024-02-27 10:11:36

前端CSS@規(guī)則

2024-04-07 08:41:34

2021-10-11 07:55:42

瀏覽器語法Webpack

2010-08-25 01:59:00

2011-12-02 09:22:23

網(wǎng)絡(luò)管理NetQos

2013-08-02 10:52:10

Android UI控件

2024-08-26 10:01:50

2024-06-12 00:00:05

2013-10-16 14:18:02

工具圖像處理

2023-04-06 09:08:41

BPM流程引擎

2020-02-21 08:45:45

PythonWeb開發(fā)框架

2023-04-03 08:30:54

項目源碼操作流程

2020-10-19 06:43:53

Redis腳本原子

2023-09-26 00:29:40

CSS布局標(biāo)簽

2009-04-02 10:17:00

交換機產(chǎn)品選購

2024-06-24 12:51:50

2024-02-23 08:14:01

項目開發(fā)Spring

2021-05-20 11:17:49

加密貨幣區(qū)塊鏈印度
點贊
收藏

51CTO技術(shù)棧公眾號