Python容器篇 4 -- 字典

字典python

dict = {key1:value1, key2:value2, ...}編程

定義一個空字典編程語言

  1. em_dict = dict()
  2. em_dict = {}

字典的特性優化

  • 可能存在多個相同的value(可重複), 可是key絕對是惟一存在的!
  • 字典不支持下標/索引和切片, 字典是經過key(鍵)來訪問的

查找字典數據code

  1. dict[key]
    • 這種訪問方式, 若是key不存在, 會直接報錯
  2. dict.get(key)
    • 這種方式, 若是key不存在, 不會報錯, 而是返回 None
  3. dict.get(key, default)
    • 這種方式更細緻, 若是key不存在, 不會返回 None, 而是返回默認值 default

修改和添加字典數據索引

  1. dict[key] = value
    • 若是key存在, 作修改操做
    • 若是key不存在, 在末尾作添加操做
  2. dict.update({key:value, ...})
    • 這種方法是用字典型的數據去作添加修改操做
    • 若是key存在, 作修改操做
    • 若是key不存在, 在末尾作添加操做

刪除字典數據字符串

  1. 刪除指定元素(鍵值對)
    • del dict[key]
    • dict.pop(key)
  2. 刪除整個字典
    • del dict
    • dict.clear()

字典的長度get

  • 長度就是鍵值對的個數
  • len(dict)

返回包含字典中全部key值的一個列表it

  • dict.keys()

返回包含字典中全部value值的一個列表io

  • dict.values()

返回包含字典中全部鍵值對元組的一個列表

  • 列表中的元素形如 (key, value)
  • dict.items()

遍歷字典

  1. 直接遍歷(也就至關於只遍歷key值)
    • for key in dict:
  2. 遍歷字典的key值
    • for key in dict.keys():
  3. 遍歷字典的value值
    • for value in dict.values():
  4. 遍歷字典中的的元素(鍵值對)
    • for item in dict.items():
    • 必定要注意了, 此處返回值是元組類型的 (key, value)
  5. 遍歷字典中的key,value鍵值對:
    • for key, value in dict.items():
    • 注意, 此處至關於一個元組的拆包操做, 把(key, value)拆出來給key和value變量

關於有序字典和無序字典

既然字典沒有下標去定位順序, 那麼天然有個疑問, 字典中的元素是有序地存放着的嗎??

其實字典這個容器分爲有序字典和無序字典, 在Python3.6版本以後, 咱們建立的dict默認就是有序字典

而在3.6版本以前, 咱們建立的dict則默認是無序字典, 無序字典的特色是:每次訪問, 字典中元素的順序是隨機的!

那麼問題來了, 若是想在3.6以前的版本環境下建立一個有序字典怎麼辦呢??

from collections import OrderedDict
my_dict = OrderedDict()  # 建立一個有序字典

可是即便3.6版本後的字典中元素是默認有序的存放的, 可是, 注意可是, 字典這種類型的容器在歸類上是屬於無序的數據類型的!!!

那麼, 這個數據類型的有序和無序是怎麼看的呢?

主要仍是看能不能用下標索引出來,
好比: 字符串, 元組 和 列表 這仨就是有序數據類型
而: 字典 和 集合 這倆就是無序的

也能夠這麼理解, 字典這種數據類型在絕大多數編程語言中都是無序的; 只不過python3.6版本後作了個數據類型的小優化, 讓字典內部的元素有序地進行存放; 可是這並沒有法改變字典這種數據類型的本質, 綜上所述字典是一種無序數據類型!