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

Python中dictionary items()系列函數(shù)的用法實例

 更新時間:2014年08月21日 11:04:56   投稿:shichen2014  
這篇文章主要介紹了Python中dictionary items()系列函數(shù)的用法,很實用的函數(shù),需要的朋友可以參考下

本文實例講述了Python中dictionary items()系列函數(shù)的用法,對Python程序設(shè)計有很好的參考借鑒價值。具體分析如下:

先來看一個示例:

import html  # available only in Python 3.x 
def make_elements(name, value, **attrs): 
  keyvals = [' %s="%s"' % item for item in attrs.items()] 
  attr_str = ''.join(keyvals) 
  element = '<{name}{attrs}>{value}</{name}>'.format( 
      name = name, 
      attrs = attr_str, 
      value = html.escape(value)) 
  return element 
make_elements('item', 'Albatross', size='large', quantity=6) 
make_elements('p', '<spam>') 

該程序的作用很簡單,就是生成HTML標(biāo)簽,注意html這個模塊只能在Python 3.x才有。

起初我只是注意到,生成標(biāo)簽屬性列表的keyvals這個dictionary類型變量構(gòu)建的方式很有意思,兩個%s對應(yīng)一個item,所以就查閱了相關(guān)的資料,結(jié)果扯出了挺多的東西,在此一并總結(jié)。

注:下面所有Python解釋器使用的版本,2.x 對應(yīng)的是2.7.3,3.x 對應(yīng)的是3.4.1
在 Python 2.x 里,官方文檔里items的方法是這么說明:生成一個 (key, value) 對的list,就像下面這樣:

>>> d = {'size': 'large', 'quantity': 6} 
>>> d.items() 
[('quantity', 6), ('size', 'large')] 

在搜索的過程中,無意看到stackoverflow上這樣一個問題:dict.items()和dict.iteritems()有什么區(qū)別? ,第一個答案大致的意思是這樣的:

“起初 items() 就是返回一個像上面那樣的包含dict所有元素的list,但是由于這樣太浪費內(nèi)存,所以后來就加入了(注:在Python 2.2開始出現(xiàn)的)iteritems(), iterkeys(), itervalues()這一組函數(shù),用于返回一個 iterator 來節(jié)省內(nèi)存,但是在 3.x 里items() 本身就返回這樣的 iterator,所以在 3.x 里items() 的行為和 2.x 的 iteritems() 行為一致,iteritems()這一組函數(shù)就廢除了。”

不過更加有意思的是,這個答案雖然被采納,下面的評論卻指出,這種說法并不準(zhǔn)確,在 3.x 里 items() 的行為和 2.x 的 iteritems() 不一樣,它實際上返回的是一個"full sequence-protocol object",這個對象能夠反映出 dict 的變化,后來在 Python 2.7 里面也加入了另外一個函數(shù) viewitems() 和 3.x 的這種行為保持一致
為了證實評論中的說法,我做了下面的測試,注意觀察測試中使用的Python版本:

測試1(Python 2.7.3):

Python 2.7.3 (default, Feb 27 2014, 19:58:35)  
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {'size': 'large', 'quantity': 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> il 
[('quantity', 6), ('size', 'large')] 
>>> it 
<dictionary-itemiterator object at 0x7fe555159f18> 
>>> vi 
dict_items([('quantity', 6), ('size', 'large')]) 

測試2(Python 3.4.1):

Python 3.4.1 (default, Aug 12 2014, 16:43:01)  
[GCC 4.9.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {'size': 'large', 'quantity': 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: 'dict' object has no attribute 'iteritems' 
>>> vi = d.viewitems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: 'dict' object has no attribute 'viewitems' 
>>> il 
dict_items([('size', 'large'), ('quantity', 6)]) 

可以看到在 Python 3.x 里面,iteritems() 和 viewitems() 這兩個方法都已經(jīng)廢除了,而 item() 得到的結(jié)果是和 2.x 里面 viewitems() 一致的。
2.x 里 iteritems() 和 viewitems() 返回的內(nèi)容都是可以用 for 來遍歷的,像下面這樣

>>> for k, v in it: 
...  print k, v 
...  
quantity 6 
size large 
>>> for k, v in vi: 
...  print k, v 
...  
quantity 6 
size large 

這兩者的區(qū)別體現(xiàn)在哪里呢?viewitems() 返回的是view object,它可以反映出 dictionary 的變化,比如上面的例子,假如在使用 it 和 vi 這兩個變量之前,向 d 里面添加一個key-value組合,區(qū)別就很容易看出來了。

>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> d['newkey'] = 'newvalue' 
>>> d 
{'newkey': 'newvalue', 'quantity': 6, 'size': 'large'} 
>>> vi 
dict_items([('newkey', 'newvalue'), ('quantity', 6), ('size', 'large')]) 
>>> it 
<dictionary-itemiterator object at 0x7f50ab898f70> 
>>> for k, v in vi: 
...  print k, v 
...  
newkey newvalue 
quantity 6 
size large 
>>> for k, v in it: 
...  print k, v 
...  
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
RuntimeError: dictionary changed size during iteration 

在第三行中,我們像 d 里面插入了一個新的元素,vi 可以繼續(xù)遍歷,而且新的遍歷能夠反映出 d 的變化,但是在遍歷 it 的時候,報錯提示 dictionary 在遍歷的時候大小發(fā)生了變化,遍歷失敗。

總結(jié)起來,在 2.x 里面,最初是 items() 這個方法,但是由于太浪費內(nèi)存,所以加入了 iteritems() 方法,用于返回一個 iterator,在 3.x 里面將 items() 的行為修改成返回一個 view object,讓它返回的對象同樣也可以反映出原 dictionary 的變化,同時在 2.7 里面又加入了 viewitems() 向下兼容這個特性。
所以在 3.x 里面不需要再去糾結(jié)于三者的不同之處,因為只保留了一個 items() 方法。

相信本文所述示例對大家的Python程序設(shè)計有一定的借鑒價值。

相關(guān)文章

  • python函數(shù)的5種參數(shù)詳解

    python函數(shù)的5種參數(shù)詳解

    昨天看《Python核心編程》的時候,剛好看到了函數(shù)部分,于是順勢將目前接觸到的集中參數(shù)類型都總結(jié)一下吧^^
    2017-02-02
  • Windows系統(tǒng)下安裝tensorflow的配置步驟

    Windows系統(tǒng)下安裝tensorflow的配置步驟

    這篇文章主要介紹了Windows系統(tǒng)下安裝tensorflow,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • python根據(jù)照片獲取地理位置及泄露防御

    python根據(jù)照片獲取地理位置及泄露防御

    這篇文章主要為大家介紹了python根據(jù)照片獲取地理位置及泄露防御,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 利用python檢查磁盤空間使用情況的代碼實現(xiàn)

    利用python檢查磁盤空間使用情況的代碼實現(xiàn)

    本文將向讀者展示如何利用Python編寫自動化腳本,以檢查磁盤空間使用情況,無論你是經(jīng)驗豐富的系統(tǒng)管理員,還是對Python自動化充滿興趣的開發(fā)者,本文都將為你提供實用的腳本示例和詳細(xì)的解析步驟,幫助你快速掌握磁盤空間監(jiān)控的自動化方法,需要的朋友可以參考下
    2024-08-08
  • Python函數(shù)之iterrows(),iteritems(),itertuples()的區(qū)別說明

    Python函數(shù)之iterrows(),iteritems(),itertuples()的區(qū)別說明

    這篇文章主要介紹了Python函數(shù)之iterrows(),iteritems(),itertuples()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python實現(xiàn)用于測試網(wǎng)站訪問速率的方法

    python實現(xiàn)用于測試網(wǎng)站訪問速率的方法

    這篇文章主要介紹了python實現(xiàn)用于測試網(wǎng)站訪問速率的方法,涉及Python中urllib2模塊及時間的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • 使用Python實現(xiàn)橋接模式的代碼詳解

    使用Python實現(xiàn)橋接模式的代碼詳解

    橋接模式是一種結(jié)構(gòu)型設(shè)計模式,它將抽象部分與其實現(xiàn)部分分離,使它們都可以獨立地變化,本文將給大家介紹如何使用Python實現(xiàn)橋接模式,需要的朋友可以參考下
    2024-02-02
  • Python入門教程(十四)Python的集合

    Python入門教程(十四)Python的集合

    這篇文章主要介紹了Python入門教程(十四)Python的集合,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • python和php哪個容易學(xué)

    python和php哪個容易學(xué)

    在本篇文章里小編給大家整理的是一篇關(guān)于python和php哪個學(xué)起來簡單的相關(guān)文章,需要的朋友們可以參考下。
    2020-06-06
  • 基于樹莓派的語音對話機器人

    基于樹莓派的語音對話機器人

    這篇文章主要為大家詳細(xì)介紹了基于樹莓派的語音對話機器人,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

九台市| 松滋市| 南部县| 苏尼特右旗| 措勤县| 台东市| 囊谦县| 萨迦县| 偃师市| 枣庄市| 滨州市| 和政县| 正宁县| 怀仁县| 当阳市| 西乌| 星子县| 凤山市| 义乌市| 遂宁市| 吉木萨尔县| 双牌县| 从江县| 邻水| 丁青县| 梧州市| 牟定县| 当雄县| 岳阳县| 平顺县| 泸溪县| 准格尔旗| 阜新| 湛江市| 瑞昌市| 新竹市| 突泉县| 锦屏县| 清原| 平安县| 原平市|