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

詳解Python字典查找性能

 更新時(shí)間:2021年12月22日 16:41:46   作者:不識(shí)少年愁  
這篇文章主要為大家介紹了Python字典查找性能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助<BR>

timeit.repeat

timeit.repeat默認(rèn)會(huì)執(zhí)行3輪,每輪執(zhí)行1000000次。返回每輪的總執(zhí)行時(shí)間列表

字典獲取性能

大家都知道字典獲取分為

中括號(hào)獲取,獲取不到會(huì)拋出KeyError

get獲取,獲取不到會(huì)返回默認(rèn)值

下面比較兩種獲取方式的性能

數(shù)據(jù)準(zhǔn)備

一條簡(jiǎn)單一條復(fù)雜

# logging標(biāo)準(zhǔn)庫(kù)的level字典
level_mapping = {'CRITICAL': 50, 'FATAL': 50, 'ERROR': 40, 'WARN': 30, 'WARNING': 30, 'INFO': 20, 'DEBUG': 10, 'NOTSET': 0}
# elasticsearch日志
record = {'_index': 'logstash-project.test-env.release-user.root-2021', '_type': 'doc', '_id': '2f60jn0BaH-cdSPUSkiF', '_version': 1, '_score': None, '_source': {'method': 'GET', 'index_name': 'project.test-env.release-user.root', '@version': 'flask', 'path': 'D:\\alpha\\flask\\logstash\\core\\flask.py', 'logger_name': 'flask.exception', 'stack_info': None, 'user': 'root', '@timestamp': '2021-12-06T07:45:20.056Z', 'level': 'ERROR', 'thread_name': 'Thread-5', 'type': 'exception', 'env': 'release', 'process': 8716, 'funcName': 'exceptions', 'port': 55792, 'project': 'test', 'tags': [], 'lineno': 89, 'request': {'headers': {'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Postman-Token': '359faa6e-9527-4de7-82ff-eecb92656875', 'User-Agent': 'PostmanRuntime/7.28.4', 'Cookie': 'csrftoken=bf58fmaG5wBVabJwBeD8srVsfw7EjKe0VN7xD8mu817UzVm', 'Accept': '*/*', 'Host': '127.0.0.1:5000'}, 'args': {'a': '11', 'b': '22'}}, 'message': 'division by zero', 'host': 'DESKTOP-JCQ9527', 'status_code': 500, 'stack_trace': 'Traceback (most recent call last):\n  File "D:\\Envs\\logstash\\lib\\site-packages\\flask\\app.py", line 1950, in full_dispatch_request\n    rv = self.dispatch_request()\n  File "D:\\Envs\\logstash\\lib\\site-packages\\flask\\app.py", line 1936, in dispatch_request\n    return self.view_functions[rule.endpoint](**req.view_args)\n  File "D:\\flask\\logstash\\app.py", line 112, in get_raise\n    a/0\nZeroDivisionError: division by zero\n', 'remote_addr': '127.0.0.1', 'url': 'http://127.0.0.1:5000/raise?a=11&b=22'}, 'fields': {'@timestamp': ['2021-12-06T07:45:20.056Z']}, 'sort': [1638776720056]}
def test():
    level_mapping['CRITICAL']
timeit.repeat(lambda: test())
[0.08700739999994767, 0.0864886999997907, 0.08675769999990735]
# 中括號(hào)加try except
def test1():
    try:
        level_mapping['CRITICA']
    except:
        pass
timeit.repeat(lambda: test1())
[0.09164779999991879, 0.0921809999999823, 0.09076550000099814]  # key存在
[0.17694680000022345, 0.1759290999998484, 0.17659119999916584]  # key不存在
def test2():
    level_mapping.get('CRITICAL') 
timeit.repeat(lambda: test2())
[0.131671400000414, 0.12985489999982747, 0.13035420000005615]

中括號(hào)獲取比get方式快了50%左右;

但當(dāng)使用中括號(hào)加try except,key不存在時(shí)要慢近一倍;

使用get時(shí)key存不存在設(shè)不設(shè)默認(rèn)值都一樣。

復(fù)雜獲取

def test3():
    level_mapping[record['_source']['level']]
timeit.repeat(lambda: test3())
[0.1141027999999551, 0.11351319999994303, 0.11431539999989582]
def test4():
    level_mapping.get(record.get('_source').get('level'))
timeit.repeat(lambda: test4())
[0.22142400000007, 0.21937850000017534, 0.21913369999992938]

隨著數(shù)據(jù)的復(fù)雜嵌套和鏈?zhǔn)讲僮鳎@次快了整整一倍。

總結(jié)

在能非常確定key存在且頻繁獲取數(shù)據(jù)的情況下,應(yīng)該盡量使用中括號(hào)取值。

另外在Python3.6后,重寫(xiě)了字典的底層數(shù)據(jù)結(jié)構(gòu),從而使字典變得有序。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Python?eval()和exec()函數(shù)使用詳解

    Python?eval()和exec()函數(shù)使用詳解

    exec函數(shù)執(zhí)行的是python語(yǔ)句,沒(méi)有返回值,eval函數(shù)執(zhí)行的是python表達(dá)式,有返回值,exec函數(shù)和eval函數(shù)都可以傳入命名空間作為參數(shù),本文給大家介紹下Python?eval()和exec()函數(shù),感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • opencv 攝像機(jī)標(biāo)定的實(shí)現(xiàn)

    opencv 攝像機(jī)標(biāo)定的實(shí)現(xiàn)

    本文主要介紹了opencv 攝像機(jī)標(biāo)定的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • python實(shí)現(xiàn)的解析crontab配置文件代碼

    python實(shí)現(xiàn)的解析crontab配置文件代碼

    這篇文章主要介紹了python實(shí)現(xiàn)的解析crontab配置文件代碼,也可以說(shuō)是python版的crontab,代碼中包含大量注釋,需要的朋友可以參考下
    2014-06-06
  • Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例

    Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例

    這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例,本文直接給出操作mysql代碼實(shí)例,包含創(chuàng)建表、插入數(shù)據(jù)、插入多條數(shù)據(jù)、查詢數(shù)據(jù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python可視化學(xué)習(xí)之seaborn繪制矩陣圖詳解

    Python可視化學(xué)習(xí)之seaborn繪制矩陣圖詳解

    矩陣圖即用一張圖繪制多個(gè)變量之間的關(guān)系,數(shù)據(jù)挖掘中常用于初期數(shù)據(jù)探索。本文介紹python中seaborn.pairplot和seaborn.PairGrid繪制矩陣圖,需要的可以參考一下
    2022-02-02
  • Python中用于檢查英文字母大寫(xiě)的isupper()方法

    Python中用于檢查英文字母大寫(xiě)的isupper()方法

    這篇文章主要介紹了Python中用于檢查英文字母大寫(xiě)的isupper()方法,是Python入門(mén)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Python編程之基于概率論的分類(lèi)方法:樸素貝葉斯

    Python編程之基于概率論的分類(lèi)方法:樸素貝葉斯

    這篇文章主要介紹了Python編程之基于概率論的分類(lèi)方法:樸素貝葉斯,簡(jiǎn)單介紹了其概述,貝葉斯理論和條件概率,以及樸素貝葉斯的原理等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python中的shutil模塊使用詳解

    Python中的shutil模塊使用詳解

    這篇文章主要介紹了Python中的shutil模塊使用詳解,shutil庫(kù)作為os模塊的補(bǔ)充,提供了復(fù)制、移動(dòng)、刪除、壓縮、解壓等操作,這些 os 模塊中一般是沒(méi)有提供的,需要的朋友可以參考下
    2023-09-09
  • 安裝Pycharm2019以及配置anconda教程的方法步驟

    安裝Pycharm2019以及配置anconda教程的方法步驟

    這篇文章主要介紹了安裝Pycharm2019以及配置anconda教程的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 淺析Python中的getattr(),setattr(),delattr(),hasattr()

    淺析Python中的getattr(),setattr(),delattr(),hasattr()

    這篇文章主要介紹了Python中的getattr(),setattr(),delattr(),hasattr() 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06

最新評(píng)論

会理县| 江油市| 固安县| 德昌县| 高陵县| 虞城县| 阿合奇县| 岐山县| 乡城县| 克拉玛依市| 泾源县| 中阳县| 龙江县| 五寨县| 崇明县| 句容市| 扎赉特旗| 垦利县| 寿宁县| 满城县| 奎屯市| 句容市| 合山市| 驻马店市| 施秉县| 乐陵市| 黑山县| 城固县| 永川市| 云和县| 恭城| 万宁市| 淮南市| 越西县| 明星| 江油市| 丹巴县| 古交市| 冷水江市| 集贤县| 林西县|