最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中defaultdict方法常見(jiàn)的使用方法及問(wèn)題解答

 更新時(shí)間:2025年07月03日 11:17:00   作者:余弦的倒數(shù)  
Python?defaultdict?是?collections?模塊的?dict?子類,自動(dòng)處理缺失鍵,這篇文章主要介紹了Python中defaultdict方法常見(jiàn)的使用方法及問(wèn)題解答,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在 Python 中, defaultdict 是 collections 模塊提供的一個(gè)非常有用的類,它是內(nèi)置字典類型 dict 的子類。 defaultdict 的主要特點(diǎn)是 自動(dòng)處理字典中不存在的鍵,避免在使用普通字典時(shí)因訪問(wèn)不存在的鍵而拋出 KeyError 異常。

核心特點(diǎn)

  • 自動(dòng)初始化默認(rèn)值:當(dāng)訪問(wèn)一個(gè)不存在的鍵時(shí),defaultdict 會(huì)調(diào)用指定的默認(rèn)工廠函數(shù)(default_factory)生成一個(gè)初始值,確定了字典中值的類型。
  • 簡(jiǎn)化代碼:無(wú)需手動(dòng)檢查鍵是否存在,適合需要分組、統(tǒng)計(jì)或聚合數(shù)據(jù)的場(chǎng)景。

基本語(yǔ)法

from collections import defaultdict

d = defaultdict(default_factory)
  • default_factory:一個(gè)可調(diào)用對(duì)象(如 listintsetstr 或自定義函數(shù)),用于生成默認(rèn)值。

常見(jiàn)使用場(chǎng)景

1. 分組數(shù)據(jù)(默認(rèn)值為列表)

將數(shù)據(jù)按鍵分組,類似 SQL 的 GROUP BY

from collections import defaultdict

data = [("apple", "fruit"), ("carrot", "vegetable"), ("apple", "fruit")]
grouped = defaultdict(list)

for name, category in data:
    grouped[category].append(name)

print(grouped)
# 輸出:defaultdict(<class 'list'>, {'fruit': ['apple', 'apple'], 'vegetable': ['carrot']})

2. 計(jì)數(shù)(默認(rèn)值為整數(shù))

統(tǒng)計(jì)元素出現(xiàn)次數(shù):

from collections import defaultdict

text = "apple banana apple orange banana"
words = text.split()
count = defaultdict(int)

for word in words:
    count[word] += 1

print(count)
# 輸出:defaultdict(<class 'int'>, {'apple': 2, 'banana': 2, 'orange': 1})

3. 集合操作(默認(rèn)值為集合)

避免重復(fù)值:

from collections import defaultdict

pairs = [("a", 1), ("b", 2), ("a", 3)]
unique = defaultdict(set)

for key, value in pairs:
    unique[key].add(value)

print(unique)
# 輸出:defaultdict(<class 'set'>, {'a': {1, 3}, 'b': {2}})

4. 嵌套字典

構(gòu)建多層嵌套結(jié)構(gòu):

from collections import defaultdict

nested = defaultdict(lambda: defaultdict(int))
nested["fruit"]["apple"] += 1
nested["vegetable"]["carrot"] += 2

print(nested["fruit"])        # 輸出:defaultdict(<class 'int'>, {'apple': 1})
print(nested["unknown_key"])  # 輸出:defaultdict(<class 'int'>, {})

注意事項(xiàng)

  • default_factory 必須可調(diào)用:例如 list、int 是類(構(gòu)造函數(shù)),而 list() 或 int() 的返回值不可作為工廠。
  • 僅對(duì) d[key] 有效:使用 d.get(key) 或 key in d 不會(huì)觸發(fā)默認(rèn)值生成。
  • 性能:與普通字典性能接近,適合高頻插入操作。

與普通字典對(duì)比

# 普通字典需要手動(dòng)處理缺失鍵
d = {}
key = "unknown"
if key not in d:
    d[key] = []
d[key].append(1)

# defaultdict 自動(dòng)處理
d = defaultdict(list)
d["unknown"].append(1)

總結(jié)

defaultdict 簡(jiǎn)化了需要初始化默認(rèn)值的字典操作,特別適合數(shù)據(jù)聚合、分組和統(tǒng)計(jì)場(chǎng)景。通過(guò)合理選擇 default_factory(如 list、intset 或自定義函數(shù)),可以大幅提升代碼簡(jiǎn)潔性和可讀性。

在 Python 中,defaultdict 繼承自 dict,因此它的 鍵(Key)和值(Value)的類型規(guī)則與普通字典一致,但也有一些細(xì)節(jié)需要注意。以下是詳細(xì)說(shuō)明:

1. 鍵(Key)的類型

  • 規(guī)則:鍵必須是 不可變類型(Immutable) 且 可哈希(Hashable)

  • 允許的類型

    • 基本類型:intfloatstrboolNone
    • 不可變?nèi)萜鳎?code>tuple(但元組內(nèi)的元素也必須不可變)
    • frozenset(不可變集合)
    • 用戶自定義的不可變對(duì)象(需正確實(shí)現(xiàn) __hash__ 和 __eq__ 方法)。
  • 禁止的類型

    • 可變類型:listdictset
    • 包含可變?cè)氐?nbsp;tuple(例如 (1, [2, 3]))。
  • 示例

    from collections import defaultdict
    
    # 合法鍵
    d = defaultdict(int)
    d["apple"] = 10       # 字符串作為鍵 ?
    d[123] = 20          # 整數(shù)作為鍵 ?
    d[(1, 2)] = 30       # 不可變?cè)M作為鍵 ?
    
    # 非法鍵(會(huì)拋出 TypeError)
    d[[1, 2]] = 40       # 列表不可哈希 ?
    d[{"a": 1}] = 50     # 字典不可哈希 ?
    

2. 值(Value)的類型

  • 規(guī)則:值可以是 任意類型,包括可變對(duì)象。

  • 允許的類型

    • 基本類型(intfloatstr 等)
    • 可變?nèi)萜鳎?code>list, dictset
    • 自定義對(duì)象、函數(shù)、類實(shí)例等。
  • 示例

    from collections import defaultdict
    
    # 值可以是列表(可變)
    d_list = defaultdict(list)
    d_list["fruits"].append("apple")
    
    # 值可以是字典(可變)
    d_dict = defaultdict(dict)
    d_dict["data"]["count"] = 10
    
    # 值可以是自定義對(duì)象
    class MyClass:
        pass
    
    d_obj = defaultdict(MyClass)
    obj = d_obj["instance"]  # 自動(dòng)生成一個(gè) MyClass 實(shí)例
    

3. default_factory 的返回值

default_factory 是一個(gè)可調(diào)用對(duì)象(如 listint 或自定義函數(shù)),它決定了 當(dāng)鍵不存在時(shí),默認(rèn)值的類型。例如:

  • defaultdict(list):默認(rèn)值是一個(gè)空列表([])。
  • defaultdict(int):默認(rèn)值是 0
  • defaultdict(lambda: "unknown"):默認(rèn)值是字符串 "unknown"。

值的類型完全由 default_factory 決定,與鍵的類型無(wú)關(guān)。

4. 嵌套 defaultdict 的鍵值

可以創(chuàng)建多層嵌套的 defaultdict,鍵的規(guī)則依然適用:

from collections import defaultdict

# 嵌套 defaultdict(值類型是另一個(gè) defaultdict)
nested = defaultdict(lambda: defaultdict(int))

# 合法操作
nested["fruit"]["apple"] += 1      # 鍵為 "fruit"(字符串)和 "apple"(字符串)
nested[123][(4, 5)] = 2           # 鍵為 123(整數(shù))和 (4, 5)(不可變?cè)M)

# 非法操作(內(nèi)層鍵非法)
nested["data"][[1, 2]] = 3        # 內(nèi)層鍵為列表,不可哈希 ?

5. 鍵和值的可變性總結(jié)

特性鍵(Key)值(Value)
類型限制必須不可變且可哈希可以是任意類型
可變性不可變可以可變
示例intstrtuplelistdict, 自定義對(duì)象

常見(jiàn)問(wèn)題解答

Q1:可以用 list 作為鍵嗎?

  • 。列表是可變類型,不可哈希。若需用類似列表的結(jié)構(gòu)作為鍵,可以轉(zhuǎn)換為不可變的 tuple。

Q2:可以用 defaultdict 作為鍵嗎?

  • 。defaultdict 是可變對(duì)象,不可哈希。只有不可變類型(如 frozenset)可以作為鍵。

Q3:值可以是函數(shù)或類嗎?

  • 。例如:
    d = defaultdict(type)  # 默認(rèn)值是類對(duì)象
    d["my_class"] = MyClass
    

總結(jié)

  • :必須為不可變且可哈希的類型(如 strinttuple)。
  • :可以是任意類型(包括可變對(duì)象),具體由 default_factory 決定。
  • 嵌套結(jié)構(gòu):可以自由嵌套 defaultdict,但需確保每一層的鍵合法。

到此這篇關(guān)于Python中defaultdict方法常見(jiàn)的使用方法及問(wèn)題解答的文章就介紹到這了,更多相關(guān)Python defaultdict方法使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python繪制二維曲線的日常應(yīng)用詳解

    Python繪制二維曲線的日常應(yīng)用詳解

    今天小編就為大家分享一篇Python繪制二維曲線的日常應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 簡(jiǎn)單了解python關(guān)鍵字global nonlocal區(qū)別

    簡(jiǎn)單了解python關(guān)鍵字global nonlocal區(qū)別

    這篇文章主要介紹了簡(jiǎn)單了解python關(guān)鍵字global nonlocal區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 使用python實(shí)現(xiàn)生成用戶信息

    使用python實(shí)現(xiàn)生成用戶信息

    這篇文章主要介紹了使用python實(shí)現(xiàn)生成用戶信息的相關(guān)代碼,非常的簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2017-03-03
  • python+opencv3生成一個(gè)自定義純色圖教程

    python+opencv3生成一個(gè)自定義純色圖教程

    今天小編就為大家分享一篇python+opencv3生成一個(gè)自定義純色圖教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 詳解Pytest測(cè)試用例的執(zhí)行方法

    詳解Pytest測(cè)試用例的執(zhí)行方法

    大家應(yīng)該都知道pytest是一個(gè)非常成熟的全功能的Python測(cè)試框架,接下來(lái)通過(guò)本文給大家分享Pytest測(cè)試用例的執(zhí)行方法,感興趣的朋友一起看看吧
    2021-05-05
  • 對(duì)numpy.append()里的axis的用法詳解

    對(duì)numpy.append()里的axis的用法詳解

    今天小編就為大家分享一篇對(duì)numpy.append()里的axis的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • pytorch-autograde-計(jì)算圖的特點(diǎn)說(shuō)明

    pytorch-autograde-計(jì)算圖的特點(diǎn)說(shuō)明

    這篇文章主要介紹了pytorch-autograde-計(jì)算圖的特點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 淺談Python中進(jìn)程的創(chuàng)建與結(jié)束

    淺談Python中進(jìn)程的創(chuàng)建與結(jié)束

    這篇文章主要介紹了淺談Python中進(jìn)程的創(chuàng)建與結(jié)束,但凡是硬件,都需要有操作系統(tǒng)去管理,只要有操作系統(tǒng),就有進(jìn)程的概念,就需要有創(chuàng)建進(jìn)程的方式,需要的朋友可以參考下
    2023-07-07
  • Pandas中的空字符串(非缺失值)處理方式

    Pandas中的空字符串(非缺失值)處理方式

    這篇文章主要介紹了Pandas中的空字符串(非缺失值)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 一文看懂Python標(biāo)識(shí)符的命名規(guī)則、規(guī)范及避坑指南

    一文看懂Python標(biāo)識(shí)符的命名規(guī)則、規(guī)范及避坑指南

    在編寫(xiě) Python 代碼時(shí),我們無(wú)時(shí)無(wú)刻不在和標(biāo)識(shí)符打交道,本文就帶你徹底搞懂:什么是 Python 標(biāo)識(shí)符、命名規(guī)則、關(guān)鍵字限制,以及行業(yè)通用的命名規(guī)范,需要的朋友可以參考下
    2026-05-05

最新評(píng)論

西安市| 太原市| 朝阳市| 蚌埠市| 麻城市| 孟连| 全州县| 嘉定区| 黑山县| 江源县| 平利县| 高阳县| 类乌齐县| 永德县| 新乐市| 扎兰屯市| 英德市| 安溪县| 潼关县| 沈阳市| 大港区| 花莲县| 莱阳市| 沅江市| 博爱县| 英山县| 衡东县| 横峰县| 洪江市| 新野县| 新兴县| 抚松县| 锡林郭勒盟| 德安县| 富宁县| 黔江区| 麻栗坡县| 桂阳县| 仙游县| 资阳市| 江西省|