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

Python 的有序字典 OrderedDict實(shí)踐案例

 更新時(shí)間:2025年10月21日 09:26:51   作者:Geoking.  
在 Python 中,字典(dict)是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),下面將帶你深入理解 OrderedDict 的工作原理、使用方法、與普通字典的區(qū)別,以及在實(shí)際項(xiàng)目中的應(yīng)用場(chǎng)景,感興趣的朋友跟隨小編一起看看吧

在 Python 中,字典(dict)是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù)。
但在 Python 3.6 之前,普通字典并不保證鍵的插入順序。
因此,Python 提供了一個(gè)專(zhuān)門(mén)的有序版本 —— OrderedDict。
下面將帶你深入理解 OrderedDict 的工作原理、使用方法、與普通字典的區(qū)別,以及在實(shí)際項(xiàng)目中的應(yīng)用場(chǎng)景。

一、什么是OrderedDict

OrderedDict 是 Python 標(biāo)準(zhǔn)庫(kù)模塊 collections 中的一個(gè)類(lèi)。
它與普通字典類(lèi)似,但會(huì)記住鍵的插入順序。

from collections import OrderedDict

你可以像使用普通字典一樣使用它,但它會(huì)保留元素的順序。
下邊是官方文檔collections.OrderedDict

二、為什么需要有序字典?

在早期版本(Python 3.5 及更早)中,普通字典是無(wú)序的,即元素的存儲(chǔ)順序與插入順序無(wú)關(guān)。
例如:

d = {'a': 1, 'b': 2, 'c': 3}
for k in d:
    print(k)

不同版本或平臺(tái)上,輸出順序可能不一致。

因此,OrderedDict 應(yīng)運(yùn)而生,用于在保存數(shù)據(jù)時(shí)保持插入順序,特別適用于以下場(chǎng)景:

  • 序列化 / JSON 輸出時(shí)需要順序一致
  • 日志或配置文件保存
  • 比較兩個(gè)有序集合是否“順序相同”
  • LRU 緩存(最近最少使用策略)

三、基本用法示例

示例 1:創(chuàng)建一個(gè)有序字典

from collections import OrderedDict
od = OrderedDict()
od['apple'] = 3
od['banana'] = 2
od['cherry'] = 5
for key, value in od.items():
    print(key, value)

輸出:

apple 3
banana 2
cherry 5

? 插入順序被完整保留。

示例 2:與普通字典的對(duì)比

from collections import OrderedDict
od1 = OrderedDict({'a': 1, 'b': 2})
od2 = OrderedDict({'b': 2, 'a': 1})
print(od1 == od2)  # False

而普通字典:

d1 = {'a': 1, 'b': 2}
d2 = {'b': 2, 'a': 1}
print(d1 == d2)  # True

?? OrderedDict 會(huì)將順序視為比較條件的一部分,而普通字典不會(huì)。

示例 3:重新排列順序

OrderedDict 提供了一個(gè)特殊方法 move_to_end() 來(lái)改變?cè)氐捻樞颉?/p>

od = OrderedDict.fromkeys('abcde')
print(od.keys())
od.move_to_end('b')  # 將 'b' 移到末尾
print(od.keys())
od.move_to_end('c', last=False)  # 將 'c' 移到最前面
print(od.keys())

輸出:

odict_keys(['a', 'b', 'c', 'd', 'e'])
odict_keys(['a', 'c', 'd', 'e', 'b'])
odict_keys(['c', 'a', 'd', 'e', 'b'])

示例 4:彈出(pop)最前或最后的元素

OrderedDictpopitem() 方法可以指定彈出“最后”或“最前”的元素。

od = OrderedDict.fromkeys('abcde', 0)
print(od.popitem())           # 默認(rèn)彈出最后一個(gè)
print(od.popitem(last=False)) # 彈出第一個(gè)

輸出:

('e', 0)
('a', 0)

? 這在實(shí)現(xiàn)緩存(如 LRU)時(shí)非常有用。

四、常用方法總結(jié)

方法說(shuō)明
move_to_end(key, last=True)移動(dòng)指定鍵到末尾或開(kāi)頭
popitem(last=True)彈出最后(或第一個(gè))元素
fromkeys(seq[, value])創(chuàng)建一個(gè)有序字典
reversed(od)按反向順序遍歷鍵
clear()清空字典
copy()淺拷貝字典

五、Python 3.7+ 之后的變化

從 Python 3.7 開(kāi)始,普通字典(dict)也默認(rèn)保持插入順序。
也就是說(shuō):

d = {}
d['a'] = 1
d['b'] = 2
d['c'] = 3
print(d)

輸出:

{'a': 1, 'b': 2, 'c': 3}

看似 OrderedDict 就沒(méi)用了?
其實(shí)并不是。

六、OrderedDict依然有用的場(chǎng)景

雖然普通字典也保持順序,但 OrderedDict 仍有以下優(yōu)勢(shì):

  1. 支持順序操作
    • move_to_end()
    • popitem(last=False)
  2. 順序敏感比較
    普通字典比較不考慮順序,OrderedDict 則考慮。
  3. 兼容舊版本代碼
    對(duì)于需要兼容 Python 3.5 及以下的項(xiàng)目,仍需使用 OrderedDict。
  4. 用于 LRU 緩存或隊(duì)列系統(tǒng)

七、實(shí)戰(zhàn)案例:實(shí)現(xiàn)一個(gè)簡(jiǎn)易 LRU 緩存

LRU(Least Recently Used)緩存策略:
當(dāng)緩存已滿時(shí),移除最近最少使用的項(xiàng)。

OrderedDict 可以輕松實(shí)現(xiàn)它:

from collections import OrderedDict
class LRUCache:
    def __init__(self, capacity):
        self.cache = OrderedDict()
        self.capacity = capacity
    def get(self, key):
        if key not in self.cache:
            return -1
        # 將訪問(wèn)的 key 移到末尾
        self.cache.move_to_end(key)
        return self.cache[key]
    def put(self, key, value):
        self.cache[key] = value
        self.cache.move_to_end(key)
        if len(self.cache) > self.capacity:
            # 彈出最舊的元素
            self.cache.popitem(last=False)
cache = LRUCache(2)
cache.put("A", 1)
cache.put("B", 2)
print(cache.cache)
cache.get("A")
cache.put("C", 3)
print(cache.cache)

輸出:

OrderedDict([('A', 1), ('B', 2)])
OrderedDict([('B', 2), ('C', 3)])

?? 訪問(wèn)過(guò)的元素會(huì)被“移到最后”,從而模擬 LRU 策略。

八、總結(jié)

特性普通字典(dict
有序字典(OrderedDict
是否保持順序? Python 3.7+ 保持? 始終保持
順序敏感比較? 否? 是
move_to_end()
支持
? 否? 是
適用場(chǎng)景一般鍵值存儲(chǔ)緩存、序列化、有序結(jié)構(gòu)

到此這篇關(guān)于Python 的有序字典 OrderedDict實(shí)踐案例的文章就介紹到這了,更多相關(guān)Python 有序字典 OrderedDict內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)戰(zhàn)之看圖猜字游戲的實(shí)現(xiàn)

    Python實(shí)戰(zhàn)之看圖猜字游戲的實(shí)現(xiàn)

    看圖猜成語(yǔ),是考驗(yàn)一個(gè)人的反應(yīng)能力,也考驗(yàn)一個(gè)人的右腦思維。據(jù)說(shuō)越聰明的人,這道題的完成率越高。本文就來(lái)用Python實(shí)現(xiàn)這一經(jīng)典小游戲,需要的可以參考一下
    2023-02-02
  • Python 在局部變量域中執(zhí)行代碼

    Python 在局部變量域中執(zhí)行代碼

    這篇文章主要介紹了Python 如何在局部變量域中執(zhí)行代碼,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • Python實(shí)現(xiàn)多并發(fā)訪問(wèn)網(wǎng)站功能示例

    Python實(shí)現(xiàn)多并發(fā)訪問(wèn)網(wǎng)站功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)多并發(fā)訪問(wèn)網(wǎng)站功能,結(jié)合具體實(shí)例形式分析了Python線程結(jié)合URL模塊并發(fā)訪問(wèn)網(wǎng)站的相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • python+JS?實(shí)現(xiàn)逆向?SMZDM?的登錄加密

    python+JS?實(shí)現(xiàn)逆向?SMZDM?的登錄加密

    這篇文章主要介紹了python+JS?實(shí)現(xiàn)逆向?SMZDM?的登錄加密,文章通過(guò)利用SMZDM平臺(tái)展開(kāi)詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解NumPy中的線性關(guān)系與數(shù)據(jù)修剪壓縮

    詳解NumPy中的線性關(guān)系與數(shù)據(jù)修剪壓縮

    本文將通過(guò)股票均線計(jì)算的案例來(lái)為大家講解一下NumPy中的線性關(guān)系以及數(shù)據(jù)修剪壓縮的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • 完美解決Pycharm無(wú)法導(dǎo)入包的問(wèn)題 Unresolved reference

    完美解決Pycharm無(wú)法導(dǎo)入包的問(wèn)題 Unresolved reference

    今天小編就為大家分享一篇完美解決Pycharm無(wú)法導(dǎo)入包的問(wèn)題 Unresolved reference,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作

    pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作

    這篇文章主要介紹了pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python中的二叉樹(shù)查找算法模塊使用指南

    Python中的二叉樹(shù)查找算法模塊使用指南

    二叉樹(shù)查找算法,在開(kāi)發(fā)實(shí)踐中,會(huì)經(jīng)常用到。按照慣例,對(duì)于這么一個(gè)常用的東西,Python一定會(huì)提供輪子的。是的,python就是這樣,一定會(huì)讓開(kāi)發(fā)者省心,降低開(kāi)發(fā)者的工作壓力。
    2014-07-07
  • Python高階函數(shù)與裝飾器函數(shù)的深入講解

    Python高階函數(shù)與裝飾器函數(shù)的深入講解

    這篇文章主要給大家介紹了關(guān)于Python高階函數(shù)與裝飾器函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Win7上搭建Cocos2d-x 3.1.1開(kāi)發(fā)環(huán)境

    Win7上搭建Cocos2d-x 3.1.1開(kāi)發(fā)環(huán)境

    現(xiàn)在,越來(lái)越多的公司采用Cocos2d-x 3.0來(lái)開(kāi)發(fā)游戲了,但是現(xiàn)在這樣的文章并不多,所以打算寫(xiě)一系列來(lái)幫助初學(xué)者快速掌握Cocos2d-x 3.0。首先就從開(kāi)發(fā)環(huán)境的大家說(shuō)起吧
    2014-07-07

最新評(píng)論

昌都县| 深州市| 萨嘎县| 厦门市| 玛多县| 突泉县| 汾阳市| 伊吾县| 晴隆县| 高清| 富源县| 彭阳县| 桃江县| 萍乡市| 贵州省| 建平县| 房产| 类乌齐县| 吐鲁番市| 济阳县| 侯马市| 东港市| 泸州市| 成安县| 开原市| 伊春市| 盐山县| 台前县| 即墨市| 孟村| 景洪市| 雅安市| 于都县| 永定县| 安新县| 湘乡市| 南川市| 泊头市| 霍邱县| 巴林右旗| 兴化市|