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

python兩種遍歷字典(dict)的方法比較

 更新時間:2014年05月29日 10:47:29   作者:  
這篇文章主要介紹了python兩種遍歷字典(dict)的方法比較,同時介紹了dict遍歷中帶括號與不帶括號的性能問題,需要的朋友可以參考下

python以其優(yōu)美的語法和方便的內(nèi)置數(shù)據(jù)結(jié)構(gòu),贏得了不少程序員的親睞。
其中有個很有用的數(shù)據(jù)結(jié)構(gòu),就是字典(dict),使用非常簡單。說到遍歷一個dict結(jié)構(gòu),我想大多數(shù)人都會想到 for key in dictobj 的方法,確實這個方法在大多數(shù)情況下都是適用的。但是并不是完全安全,請看下面這個例子:

復制代碼 代碼如下:

#這里初始化一個dict
>>> d = {'a':1, 'b':0, 'c':1, 'd':0}
#本意是遍歷dict,發(fā)現(xiàn)元素的值是0的話,就刪掉
>>> for k in d:
...   if d[k] == 0:
...     del(d[k])
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
#結(jié)果拋出異常了,兩個0的元素,也只刪掉一個。
>>> d
{'a': 1, 'c': 1, 'd': 0}

>>> d = {'a':1, 'b':0, 'c':1, 'd':0}
#d.keys() 是一個下標的數(shù)組
>>> d.keys()
['a', 'c', 'b', 'd']
#這樣遍歷,就沒問題了,因為其實其實這里遍歷的是d.keys()這個list常量。
>>> for k in d.keys():
...   if d[k] == 0:
...     del(d[k])
...
>>> d
{'a': 1, 'c': 1}
#結(jié)果也是對的
>>>

其實,這個例子是我簡化過的,我是在一個多線程的程序里發(fā)現(xiàn)這個問題的,所以,我的建議是:遍歷dict的時候,養(yǎng)成使用 for k in d.keys() 的習慣。
不過,如果是多線程的話,這樣就絕對安全嗎?也不見得:當兩個線程都取完d.keys()以后,如果兩個線程都去刪同一個key的話,先刪的會成功,后刪的那個肯定會報 KeyError ,這個看來只能通過其他方式來保證了。


另一篇:dict 兩種遍歷方式的性能對比

關(guān)于糾結(jié)dict遍歷中帶括號與不帶括號的性能問題

復制代碼 代碼如下:

for (d,x) in dict.items():
     print "key:"+d+",value:"+str(x)

for d,x in dict.items():
    print "key:"+d+",value:"+str(x)

帶括號和不帶括號性能測試結(jié)果:

復制代碼 代碼如下:

測試結(jié)果
測試條數(shù):15
帶括號開始時間:2012-06-14 12:13:37.375000
帶括號結(jié)束時間:2012-06-14 12:13:37.375000
時間間隔:0:00:00
不帶括號開始時間:2012-06-14 12:13:37.375000
不帶括號結(jié)束時間:2012-06-14 12:13:37.375000
時間間隔:0:00:00

測試條數(shù):50
帶括號開始時間:2012-06-14 12:13:57.921000
帶括號結(jié)束時間:2012-06-14 12:13:57.921000
時間間隔:0:00:00
不帶括號開始時間:2012-06-14 12:13:57.921000
不帶括號結(jié)束時間:2012-06-14 12:13:57.937000
時間間隔:0:00:00.016000
測試條數(shù):100
帶括號開始時間:2012-06-14 11:53:57.453000
帶括號結(jié)束時間:2012-06-14 11:53:57.468000
時間間隔:0:00:00.015000
不帶括號開始時間:2012-06-14 11:53:57.468000
不帶括號結(jié)束時間:2012-06-14 11:53:57.531000
時間間隔:0:00:00.063000

測試條數(shù):150
帶括號開始時間:2012-06-14 12:00:54.812000
帶括號結(jié)束時間:2012-06-14 12:00:54.828000
時間間隔:0:00:00.016000
不帶括號開始時間:2012-06-14 12:00:54.828000
不帶括號結(jié)束時間:2012-06-14 12:00:54.921000
時間間隔:0:00:00.093000

測試條數(shù):200
帶括號開始時間:2012-06-14 11:59:54.609000
帶括號結(jié)束時間:2012-06-14 11:59:54.687000
時間間隔:0:00:00.078000
不帶括號開始時間:2012-06-14 11:59:54.687000
不帶括號結(jié)束時間:2012-06-14 11:59:54.734000
時間間隔:0:00:00.047000

測試條數(shù):500
帶括號開始時間:2012-06-14 11:54:39.906000
帶括號結(jié)束時間:2012-06-14 11:54:40.078000
時間間隔:0:00:00.172000
不帶括號開始時間:2012-06-14 11:54:40.078000
不帶括號結(jié)束時間:2012-06-14 11:54:40.125000
時間間隔:0:00:00.047000

測試條數(shù):1000
帶括號開始時間:2012-06-14 11:54:49.171000
帶括號結(jié)束時間:2012-06-14 11:54:49.437000
時間間隔:0:00:00.266000
不帶括號開始時間:2012-06-14 11:54:49.437000
不帶括號結(jié)束時間:2012-06-14 11:54:49.609000
時間間隔:0:00:00.172000

測試條數(shù):2000
帶括號開始時間:2012-06-14 11:54:58.921000
帶括號結(jié)束時間:2012-06-14 11:54:59.328000
時間間隔:0:00:00.407000
不帶括號開始時間:2012-06-14 11:54:59.328000
不帶括號結(jié)束時間:2012-06-14 11:54:59.687000
時間間隔:0:00:00.359000

測試條數(shù):5000
帶括號開始時間:2012-06-14 11:55:05.781000
帶括號結(jié)束時間:2012-06-14 11:55:06.734000
時間間隔:0:00:00.953000
不帶括號開始時間:2012-06-14 11:55:06.734000
不帶括號結(jié)束時間:2012-06-14 11:55:07.609000
時間間隔:0:00:00.875000

測試條數(shù):10000
帶括號開始時間:2012-06-14 11:55:15.656000
帶括號結(jié)束時間:2012-06-14 11:55:17.390000
時間間隔:0:00:01.734000
不帶括號開始時間:2012-06-14 11:55:17.390000
不帶括號結(jié)束時間:2012-06-14 11:55:19.109000
時間間隔:0:00:01.719000

測試條數(shù):20000
帶括號開始時間:2012-06-14 12:19:14.921000
帶括號結(jié)束時間:2012-06-14 12:19:18.593000
時間間隔:0:00:03.672000
不帶括號開始時間:2012-06-14 12:19:18.593000
不帶括號結(jié)束時間:2012-06-14 12:19:22.218000
時間間隔:0:00:03.625000


我們可以看出,dict條數(shù)在200一下的時候是帶括號的性能比較高一點,但是在200條以上的數(shù)據(jù)后不帶括號的執(zhí)行時間會少些.

下面是測試代碼:

復制代碼 代碼如下:

測試Code
#-*- coding: utf-8 -*-
import datetime,codecs

dict = {}

for i in xrange(0,20000):
    dict.setdefault("name"+str(i))
    dict["name"+str(i)]="name"

s=codecs.open(r'c:\\dict.txt','a', 'utf-8')

def write(des):
    s.write(des.decode("utf-8"))

write("測試條數(shù):")
write(str(len(dict))+"\r\n")
write("帶括號開始時間:")
a=datetime.datetime.now()
s.write(str(a)+"\r\n")

for (d,x) in dict.items():
    print "key:"+d+",value:"+str(x)
write("帶括號結(jié)束時間:")
b=datetime.datetime.now()
write(str(b)+"\r\n")
write("時間間隔:")
write(str(b-a)+"\r\n")

write("不帶括號開始時間:")
c=datetime.datetime.now()
write(str(c)+"\r\n")
for d,x in dict.items():
    print "key:"+d+",value:"+str(x)
write("不帶括號結(jié)束時間:")
d=datetime.datetime.now()
write(str(d)+"\r\n")
write("時間間隔:")
write(str(d-c)+"\r\n")
write("\r\n")
s.close()

中文亂碼問題有沒有很好的解決辦法....?

相關(guān)文章

  • Flask項目中實現(xiàn)短信驗證碼和郵箱驗證碼功能

    Flask項目中實現(xiàn)短信驗證碼和郵箱驗證碼功能

    這篇文章主要介紹了Flask項目中實現(xiàn)短信驗證碼和郵箱驗證碼功能,需本文通過截圖實例代碼的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2019-12-12
  • 關(guān)于pycharm找不到MySQLdb模塊的解決方法

    關(guān)于pycharm找不到MySQLdb模塊的解決方法

    MySQLdb是用于Python鏈接Mysql數(shù)據(jù)庫的接口,它實現(xiàn)了Python數(shù)據(jù)庫API規(guī)范V2.0,基于MySql C API上建立的,本文給大家介紹pycharm找不到MySQLdb模塊解決方法,需要的朋友參考下吧
    2021-06-06
  • Python簡單讀取json文件功能示例

    Python簡單讀取json文件功能示例

    這篇文章主要介紹了Python簡單讀取json文件功能,結(jié)合實例形式分析了Python文件讀取及json格式數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • python畫立方體--魔方

    python畫立方體--魔方

    這篇文章主要介紹了python畫立方體--魔方,下文分享詳細的代碼說明,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python實現(xiàn)超時退出的三種方式總結(jié)

    python實現(xiàn)超時退出的三種方式總結(jié)

    這篇文章主要介紹了python實現(xiàn)超時退出的三種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python使用BeautifulSoup進行頁面解析

    Python使用BeautifulSoup進行頁面解析

    在Python中,我們可以使用BeautifulSoup庫來解析網(wǎng)頁,BeautifulSoup提供了簡單而強大的API,使得解析網(wǎng)頁變得輕松而高效,下面小編就來為大家詳細講講BeautifulSoup解析網(wǎng)頁的具體操作吧
    2023-09-09
  • 簡單談談python中的lambda表達式

    簡單談談python中的lambda表達式

    Lambda表達式在Python中經(jīng)常使用到,本文是給大家分享的小編總結(jié)出來的Lambda表達式的常用方法。
    2018-01-01
  • python腳本打包后無法運行exe文件的解決方案

    python腳本打包后無法運行exe文件的解決方案

    這篇文章主要介紹了python腳本打包后無法運行exe文件的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Django 解決開發(fā)自定義拋出異常的問題

    Django 解決開發(fā)自定義拋出異常的問題

    這篇文章主要介紹了Django 解決開發(fā)自定義拋出異常的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python中format()格式輸出全解

    Python中format()格式輸出全解

    這篇文章主要介紹了Python中format()格式輸出 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04

最新評論

抚远县| 建平县| 唐山市| 炎陵县| 上栗县| 贵州省| 花莲县| 呼图壁县| 佛冈县| 宁阳县| 新源县| 婺源县| 富民县| 财经| 集安市| 凤台县| 逊克县| 克山县| 铁力市| 格尔木市| 虞城县| 梧州市| 巴马| 枣强县| 和龙市| 五河县| 柘城县| 云和县| 桦川县| 秀山| 剑阁县| 金坛市| 镇康县| 上栗县| 申扎县| 宿松县| 兴义市| 昂仁县| 依兰县| 黑水县| 南投县|