遍歷字典鍵值

  1. 字典的索引並不是序列數字,不能依序列出,要遍歷 (traverse) 字典的鍵及值可用下列 for 迴圈取出所有鍵值配對:
    for key,value in dict_name.items():
    
  2. 範例:遍歷字典 uid,並列出其值及鍵。
    [dywang@deyu zzz]$ cat dict6.py
    #!/usr/bin/python3
    # coding: utf-8
    
    uid = { 'dywang':1000, 'david':2346, 'linda':1324 }
    for key,value in uid.items():
    	print("uid = %d" % value)
    	print("key = %s" % key)
    
  3. 執行結果:for 迴圈逐一輸出字典所有元素。
    [dywang@deyu zzz]$ ./dict6.py 
    uid = 1000
    key = dywang
    uid = 2346
    key = david
    uid = 1324
    key = linda
    
  4. 修改 dict6.py 為 dict6a.py,增加 for 迴圈中判斸 key 是 david 時,刪除該元素。
    [dywang@deyu 10827000]$ cat ./dict6a.py
    #!/usr/bin/python3
    # coding: utf-8
    
    uid = { 'dywang':1000, 'david':2346, 'linda':1324 }
    for key,value in uid.items():
        print("uid = %d" % value)
        print("key = %s" % key)
        if key == 'david':
            del uid[key]
    
  5. 執行結果:出現錯誤,python3 無法在for 迴圈改變字典大小。
    [dywang@deyu 10827000]$ ./dict6a.py
    uid = 1000
    key = dywang
    uid = 2346
    key = david
    Traceback (most recent call last):
      File "./dict6a.py", line 5, in <module>
        for key,value in uid.items():
    RuntimeError: dictionary changed size during iteration
    
  6. 為解決上述問題,uid.items()必須轉換成 list。
    [dywang@deyu 10827000]$ vim dict6b.py
    [dywang@deyu 10827000]$ cat dict6b.py
    #!/usr/bin/python3
    # coding: utf-8
    
    uid = { 'dywang':1000, 'david':2346, 'linda':1324 }
    for key,value in list(uid.items()):
        print("uid = %d" % value)
        print("key = %s" % key)
        if key == 'david':
            del uid[key]
    print(uid)
    
  7. 執行結果:uid.items() 轉成 list 後,迴圈中成功刪除 devid。
    [dywang@deyu 10827000]$ ./dict6b.py
    uid = 1000
    key = dywang
    uid = 2346
    key = david
    uid = 1324
    key = linda
    {'dywang': 1000, 'linda': 1324}