關於在Python3中:字典在迭代過程中,字典的長度是不允許改變的


# -*- coding: utf-8 -*-
"""
Created on Tue Apr 3 17:21:10 2018
@author: Lelouch_C.C
"""
#注意:下面幾個列子不要一起運行,單獨運行會出現正常結果
a={'a':0,'b':2}

for k in a:
if a[k] < 1:
a[k]=1
print(a)
"""
輸出:{'a': 1, 'b': 2}
"""
for k in a:
if a[k] < 1:
del(a[k])
print(a)
"""
輸出:RuntimeError: dictionary changed size during iteration
"""
"""
#第一例,字典的值被替換,字典的長度沒有發生變化,因此迭代可以繼續進行
#第二例,因為在迭代過程中值為0的鍵值對是要被刪除的,刪除后字典的長度發生改變了,因此再進行迭代會出錯
#通過上述例子,可以看出,字典在迭代過程中,字典的長度是不允許改變的
#如何讓字典改變后還可以輸出?
#有一種改變辦法是:讓list()函數作用於字典a.由於元組是不可變的,所以不用tuple().
#list()函數作用於字典后,會將字典的鍵放在一個列表里,列表可以被修改,且修改后可以進行迭代。
"""

for k in list(a):
if a[k] < 1:
del (a[k])
print(a)
"""
輸出:{'b': 2}
"""
#為什么3個一起運行會都輸出輸出:{'a': 1, 'b': 2}
#這是因為第一個例子運行完已經將字典a變為{'a': 1, 'b': 2},
#后面兩個例子的if判斷已經刪除不了鍵值對


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM