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

Python字典的選擇之道:掌握六種類型的終極指南!

開發(fā) 前端
在本文中,介紹了可以在不同情況下使用的不同類型的Python字典。盡管很多Python開發(fā)者只使用常規(guī)字典,但也可以在項(xiàng)目中嘗試使用其他類型的Python字典。如果沒有適合的字典,可以使用UserDict類來創(chuàng)建自己的類似字典的類。

一、簡(jiǎn)介

你可能會(huì)驚訝地發(fā)現(xiàn),在Python的標(biāo)準(zhǔn)庫中實(shí)際上有6種不同的字典類型!在某些情況下,開發(fā)者可能不想使用標(biāo)準(zhǔn)的Python字典(dict),在本文中將討論P(yáng)ython中其他5種鮮為人知的字典。

每種字典類型都是為特定需求而設(shè)計(jì)的。了解這些字典類型可以讓Python開發(fā)者選擇適合其特定需求的字典,從而提高編碼效率和靈活性。

二、Python字典是什么?

在Python中,字典(dict)是一種內(nèi)置的數(shù)據(jù)結(jié)構(gòu),用于以鍵-值對(duì)的形式存儲(chǔ)數(shù)據(jù)集合。你可能聽過Python字典的其他名稱,如查找表、映射、哈希映射或關(guān)聯(lián)數(shù)組。

Python字典的一個(gè)最全面的例子就是電話簿??梢允褂秒娫挷究焖贆z索與給定姓名(鍵)相關(guān)聯(lián)的信息(值)。Python字典允許以最高效的方式存儲(chǔ)和檢索所需的數(shù)據(jù);這就是為什么Python dict是這種編程語言中最常用的數(shù)據(jù)類型。

三、Python字典的類型

大多數(shù)Python開發(fā)者通常只使用標(biāo)準(zhǔn)字典(dict)。有趣的是,Python還提供了其他幾種內(nèi)置的字典數(shù)據(jù)結(jié)構(gòu)。盡管在大多數(shù)情況下,標(biāo)準(zhǔn)Python字典已經(jīng)足夠使用,但至少了解一下其他字典類型也會(huì)對(duì)開發(fā)者有所裨益。Python的不同字典類型如下:

  1. dict
  2. collections.defaultdict
  3. collections.OrderedDict
  4. collections.ChainMap
  5. collections.Counter
  6. collections.UserDict

本文將逐個(gè)介紹每種類型的Python字典,并通過示例進(jìn)行解釋。

3.1 dict

如前所述,Python中最常見的字典類型是標(biāo)準(zhǔn)類型(dict)。這種類型的Python字典可以使用花括號(hào){}來輕松創(chuàng)建和更新。標(biāo)準(zhǔn)Python字典內(nèi)置了許多函數(shù),可以讓工作更加輕松。

標(biāo)準(zhǔn)Python字典的使用示例標(biāo)準(zhǔn)Python字典的使用示例

下面是代碼片段。

a = {'one': 1, 'two':2}
print(a,type(a))
# output: {'one': 1, 'two': 2} <class 'dict'>

a.update({'three': 3}) #  相當(dāng)于a['three'] = 3
print(a)
# output: {'one': 1, 'two': 2, 'three': 3}

a['two'] = 2.1
print(a['two'])
# output: 2.1

請(qǐng)注意,Python字典中的值可以是任何類型,但鍵必須是唯一且不可變的。一般情況下,在標(biāo)準(zhǔn)Python字典中進(jìn)行查找、插入、更新和刪除操作的時(shí)間復(fù)雜度為O(1)。

3.2 collections.defaultdict

Python中的另一種字典類型是defaultdict,可以從collections模塊中導(dǎo)入。Python defaultdict字典用于想從字典中調(diào)用一個(gè)不存在的鍵時(shí)返回一個(gè)默認(rèn)值。

使用Python defaultdict的示例使用Python defaultdict的示例

下面是代碼片段。

from collections import defaultdict

a = defaultdict(int)
print(a['one'])
# output:0

a['one'] += 1
print(a['one'])
# output: 1

Python開發(fā)者在使用常規(guī)字典時(shí),通常使用get()方法或直接處理KeyError異常。在這種情況下,使用collections.defaultdict可以使開發(fā)者的意圖更加明確。

3.3 collections.OrderedDict

collections.OrderedDict是Python 3.1中引入的一種Python字典子類。顧名思義,這種類型的Python字典可以記住鍵插入的順序。如果特別關(guān)心Python字典中鍵插入的順序,可以使用collections.OrderedDict。

使用Python OrderedDict的示例使用Python OrderedDict的示例

下面是代碼片段。

from collections import OrderedDict

a = OrderedDict({'one': 1, 'two': 2})
print(a)
# output: OrderedDict([('one', 1), ('two', 2)])

a['three'] = 3
print(a)
# output: OrderedDict([('one', 1), ('two', 2), ('three', 3)])

collections.OrderedDict還有一個(gè)很酷的函數(shù),可以改變一些鍵的順序。可以使用move_to_end將其中一個(gè)鍵移到Python字典的末尾(last=True),或移到開頭(last=False):

使用Python OrderedDict的示例使用Python OrderedDict的示例

下面是代碼片段。

from collections import OrderedDict

a = OrderedDict({'one': 1, 'two': 2, 'three': 3, 'four': 4})
print(a)
# output: OrderedDict([('one', 1), ('two', 2)])

a.move_to_end('one', last=True) # 將'one'移至末尾
print(a)
# output: OrderedDict([('two', 2), ('three', 3), ('four', 4), ('one', 1)])

a.move_to_end('three', last=False) # 將'three'移到開頭
print(a)
# output: OrderedDict([('three', 3), ('two', 2),('four', 4),('one', 1)])

3.4 collections.ChainMap

另一種Python字典類型是collections.ChainMap,Python的ChainMap是一種類似字典的類,可以將多個(gè)字典合并為一個(gè)視圖。這種類型的字典允許開發(fā)者在多個(gè)字典中搜索一個(gè)鍵,就好像它們都合并成了一個(gè)單一的字典。

使用Python ChainMap的示例使用Python ChainMap的示例

下面是代碼片段。

from collections import ChainMap

a = {'one': 1, 'two': 2}
b = {'three': 3, 'four': 4}
c = {'five': 5, 'six': 6, 'three': 3.1}

merged = ChainMap(a, b,c)
print(merged)
# output: ChainMap({'one': 1,'two': 2},
                   {'three': 3, 'four': 4},
                   {'five': 5, 'six': 6, 'three': 3.1})

print(merged['three']) # 只返回關(guān)鍵字的第一次出現(xiàn)結(jié)果
# output:3

請(qǐng)注意,ChainMap只會(huì)返回要搜索的鍵的第一次出現(xiàn)。另外還要記住,ChainMap只存儲(chǔ)對(duì)實(shí)際對(duì)象的引用;因此,如果在任何一個(gè)原始字典中進(jìn)行了更改,ChainMap也會(huì)隨之更新。

使用Python ChainMap的示例使用Python ChainMap的示例

下面是代碼片段。

from collections import ChainMap

a = {'one': 1, 'two': 2}
b = {'three': 3, 'four': 4}
c = {'five': 5, 'six': 6, 'three': 3.1}

merged = ChainMap(a, b, c )

a['one'] = 1.1
print(merged['one'])
# output: 1.1

3.5 collections.Counter

Counter是Python中另一個(gè)能夠計(jì)數(shù)可散列對(duì)象的字典。Python開發(fā)者通常使用collections.Counter來計(jì)算可迭代對(duì)象中元素的頻率;例如,可以使用這種類型的Python字典來計(jì)算句子中使用的單詞數(shù)量。

使用Python Counter的示例使用Python Counter的示例

下面是代碼片段。

from collections import Counter

sentence = "we can't control our thoughts, but we can control our words"

a = Counter(sentence.split(' '))
print(a)
# output: Counter(
              {
               'we': 2, 'control': 2, 'our': 2,
               "can't": 1, 'thoughts': 1,
               'but': 1, 'can': 1, 'words': 1
              }
          )
print(a.most_common(2)) # 獲得2個(gè)出現(xiàn)次數(shù)最多的元素
# output: [('we', 2), ('control', 2)]

如果需要列出出現(xiàn)頻率最高的n個(gè)元素及其計(jì)數(shù),從最常見到最不常見,可以在Counter對(duì)象上使用most_common函數(shù)。如果n為None,它將列出所有元素的計(jì)數(shù)。

3.6 collections.UserDict

本文要討論的最后一種Python字典類型是UserDict字典。UserDict也是collections模塊提供的一個(gè)類。這個(gè)類設(shè)計(jì)成用作創(chuàng)建自定義字典類對(duì)象的基類。

當(dāng)需要定義自己的類似字典的數(shù)據(jù)結(jié)構(gòu)時(shí),可以使用collections.UserDict。想象一個(gè)簡(jiǎn)單的場(chǎng)景,需要將每個(gè)值乘以5并保存在自定義的Python字典中。通過使用UserDict,可以像這樣實(shí)現(xiàn):

使用Python UserDict的示例使用Python UserDict的示例

下面是代碼片段。

from collections import UserDict

class MyDict(UserDict):
    def __setitem__(self, key, value):
        super().__setitem__key, value * 5)

d = MyDict({'one': 1, 'two': 2})
print(d)
#output: {'one': 5, 'two': 10}

還可以隨時(shí)覆蓋其他函數(shù),如__setitem__()、__getitem__()和__delitem__(),以進(jìn)一步自定義字典的行為。

四、總結(jié)

在本文中,介紹了可以在不同情況下使用的不同類型的Python字典。盡管很多Python開發(fā)者只使用常規(guī)字典,但也可以在項(xiàng)目中嘗試使用其他類型的Python字典。如果沒有適合的字典,可以使用UserDict類來創(chuàng)建自己的類似字典的類。

責(zé)任編輯:武曉燕 來源: Python學(xué)研大本營
相關(guān)推薦

2025-07-11 00:51:55

2010-03-15 17:12:52

Python字典

2025-01-03 08:48:20

列表推導(dǎo)式Python編程

2022-05-08 22:09:28

網(wǎng)絡(luò)拓?fù)?/a>網(wǎng)絡(luò)技術(shù)網(wǎng)絡(luò)

2023-11-06 08:15:42

遍歷列表Python

2011-05-19 15:57:15

測(cè)試專家

2025-07-08 08:20:39

2023-05-15 08:12:38

2025-06-17 08:25:00

Kubernetes集群容器

2021-07-29 09:00:00

Python工具機(jī)器學(xué)習(xí)

2011-06-07 09:36:18

2016-01-15 17:36:29

云計(jì)算云應(yīng)用

2012-10-15 13:26:31

云計(jì)算架構(gòu)

2025-02-27 00:00:30

SpringJava方式

2024-05-17 09:46:17

Python單元測(cè)試unittest模塊

2021-06-07 10:10:30

供應(yīng)鏈攻擊軟件Codecov攻擊

2023-08-26 20:51:25

Python函數(shù)代碼

2010-04-25 21:58:24

NTFS權(quán)限

2012-11-02 13:39:22

2010-10-08 11:13:22

MySQL修改密碼
點(diǎn)贊
收藏

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