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

Python 的有序字典 OrderedDict實踐案例

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

在 Python 中,字典(dict)是一種非常常用的數據結構,用于以鍵值對的形式存儲數據。
但在 Python 3.6 之前,普通字典并不保證鍵的插入順序。
因此,Python 提供了一個專門的有序版本 —— OrderedDict。
下面將帶你深入理解 OrderedDict 的工作原理、使用方法、與普通字典的區(qū)別,以及在實際項目中的應用場景。

一、什么是OrderedDict

OrderedDict 是 Python 標準庫模塊 collections 中的一個類。
它與普通字典類似,但會記住鍵的插入順序。

from collections import OrderedDict

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

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

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

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

不同版本或平臺上,輸出順序可能不一致。

因此,OrderedDict 應運而生,用于在保存數據時保持插入順序,特別適用于以下場景:

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

三、基本用法示例

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

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:與普通字典的對比

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 會將順序視為比較條件的一部分,而普通字典不會。

示例 3:重新排列順序

OrderedDict 提供了一個特殊方法 move_to_end() 來改變元素的順序。

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())           # 默認彈出最后一個
print(od.popitem(last=False)) # 彈出第一個

輸出:

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

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

四、常用方法總結

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

五、Python 3.7+ 之后的變化

從 Python 3.7 開始,普通字典(dict)也默認保持插入順序。
也就是說:

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

輸出:

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

看似 OrderedDict 就沒用了?
其實并不是。

六、OrderedDict依然有用的場景

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

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

七、實戰(zhàn)案例:實現(xiàn)一個簡易 LRU 緩存

LRU(Least Recently Used)緩存策略:
當緩存已滿時,移除最近最少使用的項。

OrderedDict 可以輕松實現(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
        # 將訪問的 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)])

?? 訪問過的元素會被“移到最后”,從而模擬 LRU 策略。

八、總結

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

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

相關文章

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

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

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

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

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

    Python實現(xiàn)多并發(fā)訪問網站功能示例

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

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

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

    詳解NumPy中的線性關系與數據修剪壓縮

    本文將通過股票均線計算的案例來為大家講解一下NumPy中的線性關系以及數據修剪壓縮的實現(xiàn),文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-05-05
  • 完美解決Pycharm無法導入包的問題 Unresolved reference

    完美解決Pycharm無法導入包的問題 Unresolved reference

    今天小編就為大家分享一篇完美解決Pycharm無法導入包的問題 Unresolved reference,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • pandas快速處理Excel,替換Nan,轉字典的操作

    pandas快速處理Excel,替換Nan,轉字典的操作

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

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

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

    Python高階函數與裝飾器函數的深入講解

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

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

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

最新評論

灌南县| 遂宁市| 尉氏县| 扎兰屯市| 灵川县| 张家川| 甘孜| 石河子市| 富锦市| 江山市| 平潭县| 乐都县| 沧州市| 家居| 台中县| 会泽县| 会同县| 建昌县| 左贡县| 安多县| 蓝山县| 临泉县| 昌黎县| 叙永县| 五原县| 仁化县| 栾城县| 崇阳县| 大兴区| 眉山市| 任丘市| 双城市| 通辽市| 潜山县| 汕尾市| 米脂县| 汾阳市| 莱阳市| 商城县| 临颍县| 紫云|