色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Python字典鍵。“復雜”的

瀏覽:9日期:2022-08-07 10:05:53
如何解決Python字典鍵。“復雜”的?

首先,key in d.keys()保證為您提供與key in ddict相同的值d。

而且,in對dict或操作(從3.x中dict_keys調用)返回的對象的操作 不是 O(N),而是O(1)。keys() __

沒有真正的“優化”。只是使用哈希是在__contains__哈希表上實現的明顯方法,就像它是實現的明顯方法一樣__getitem__。

您可能會問這在哪里得到保證。

好吧,不是。映射類型將dict基本上定義為的哈希表實現collections.abc.Mapping。沒有什么可以阻止某人創建Mapping的哈希表實現的,但是仍然可以提供O(N)搜索。但是,要實現如此糟糕的實現將是額外的工作,那么為什么要這么做呢?

如果您確實需要自己證明它,則可以測試您關心的每個實現(使用探查器,或者通過將某種類型與自定義一起使用,__hash__并__eq__記錄調用,或者…),或者閱讀源代碼。

在2.x中,您不想調用keys,因為它會生成一個list密鑰,而不是一個KeysView。您可以使用iterkeys,但可能會生成迭代器或其他不是O(1)的東西。因此,只需將dict本身用作序列即可。

即使在3.x中,也不需要調用keys,因為沒有必要。迭代a dict,檢查其__contains__,并且通常將其視為序列 總是等同于對其鍵執行相同的操作,那么為什么要打擾呢?(當然,構建瑣碎的宏keyview并進行訪問將使您的運行時間增加幾納秒,并為程序增加一些擊鍵。)

(尚不清楚d.keys()/d.iterkeys()和d2.x中使用序列運算是否等效。除了性能問題外,它們在每個cpython,Jython,IronPython和PyPy實現中均 等效,但是似乎在任何地方都沒有說明。 3.x中的方式。這并不重要;只需使用key in d。)

在進行此操作時,請注意以下幾點:

if(dict[key] != None):

……將無法正常工作。如果key不在中dict,則將引發KeyError而不返回None。

另外,您永遠不要None使用==或進行檢查!=。經常使用is。

您可以使用try-或更簡單地說,執行do if dict.get(key, None) is notNone。但是同樣,沒有理由這樣做。此外,這將無法處理None完全有效的物品。在這種情況下,您需要執行sentinel = object(); ifdict.get(key, sentinel) is not sentinel:。

因此,正確的寫法是:

if key in d:

更普遍地說,這是不正確的:

我知道關鍵字“ in”通常為O(n)(因為這僅表示python遍歷整個列表并比較每個元素

in與大多數其他運算符一樣,該運算符僅是對__contains__方法的調用(或等效于內置的C / Java / .NET /RPython)。list通過迭代列表并比較每個元素來實現它;dict通過散列值并查找散列來實現它;blist.blist通過走B +Tree來實現它;因此,它可以是O(n),O(1),O(log n)或完全不同的東西。

解決方法

快速提問主要滿足我對這個話題的好奇心。

我正在編寫一些帶有SQlite數據庫后端的大型python程序,并且將來會處理大量記錄,因此,我需要盡可能地優化。

對于一些功能,我正在字典中搜索關鍵字。我一直在使用“ in”關鍵字進行原型設計,并計劃稍后返回并優化這些搜索,因為我知道“in”關鍵字通常為O(n)(因為這僅表示python遍歷整個列表并進行比較每個元素)。但是,由于pythondict基本上只是一個哈希映射,因此python解釋器足夠聰明來解釋:

if(key in dict.keys()): ...code...

至:

if(dict[key] != None): ...code...

它基本上是相同的操作,但頂部為O(n),底部為O(1)。

對我來說,在代碼中使用底部版本很容易,但是后來我很好奇并以為我會問。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 欧美日韩亚洲高清不卡一区二区三区 | 欧美极品第1页专区 | 女人被男人躁得好爽免费文 | 另类综合视频 | 特级欧美午夜aa毛片 | 久草免费网站 | 国内精品免费一区二区观看 | 欧美在线一级va免费观看 | 精品在线一区二区三区 | 日本亚洲欧美高清专区vr专区 | 狠狠色综合网站久久久久久久 | 中国日本高清免费视频网 | 国产精品1区2区3区 国产精品1区2区3区在线播放 | 中文字幕在线看视频一区二区三区 | 亚洲va中文字幕欧美不卡 | 香蕉网影院在线观看免费 | 亚洲综合国产 | 国产精品亚洲一区二区三区 | 日韩免费一级毛片欧美一级日韩片 | 亚洲男人的天堂久久无 | 九九精品免费视频 | 黄黄的网站在线观看 | 欧美一级毛片无遮无挡 | 高清性色生活片欧美在线 | 在线a人片免费观看国产 | 久草视频免费在线播放 | 国产八区| 亚洲精品www | 亚洲成a人片在线播放 | 欧洲成人在线视频 | 偷柏自拍亚洲欧美综合在线图 | 国产99久久九九精品免费 | 美女又黄又www | 欧美精品一区二区精品久久 | 国产成人精品视频免费 | 精品国产成人在线 | 久久综合精品国产一区二区三区无 | 成人性动漫高清免费观看网址 | 亚洲一级网站 | 手机看片神马午夜片 | 国产亚洲综合在线 |