天天看點

人工智能(python)開發 —— 字典(dict)

       本章主要講述了關于字典的相關知識,字典是python開發的一個重要的資料存儲容器,重點了解字典的存儲方式并能夠靈活的運用到實際的問題中來。

一、字典的概念

1、字典的定義

        1. 字典是一種可變的容器,可以存儲任意類型的資料

        2. 字典中的每個資料都是用"鍵"(key) 進行索引,而不象序列可以用下标來進行索引

        3. 字典中的資料沒有先後順序關系,字典的存儲是無序的

        4. 字典中的資料以鍵(key)-值(value)對形式進行映射存儲

        5. 字典的鍵不能重複,且隻能用不可變類型作為字典的鍵

2、字典的字面值表示方式

        {} 括起來,以冒号(:) 分隔鍵-值對,各鍵-值對用逗号分隔開

3、建立空字典

        d = {}        # 空字典

        d = dict()

4、建立非空字典

d = {'name':'tarena', 'age': 15}
d = {1:'星期一', 2:"星期二"}
# 以下寫法會出現問題(因為鍵不能重複)
d = {'a': 1, 'b': 2, 'a': '一'}  
           

5、字典的構造(建立)函數

        1、dict()                    #  建立空字典,等同于 {}

        2、dict(iterable)       # 用可疊代對象初始化一個字典

        3、dict(**kwargs)     # 關鍵字傳參形式生成一個字典

示例:
d = dict()
d = dict([('name', 'tarena'), ('age', 15)])
d = dict(name='tarena', age=15)
           

6、字典的鍵、值的取值

字典的值(value)可以是任意類型

        字典的值可以是布爾值,資料,字元串,None,清單,元組,字典,以及後面要學到的集合,函數,類對象等所有類型

字典的 鍵(key)必須為不可變類型的值

        不可變的類型:

                bool,int,float,complex,str,tuple,frozenset(固定集合)

                包括:None

        不能充當鍵的類型有:

                清單,字典,集合set

示例:
{“a”: ”a”}
{100: ”100”}
{True: ”True”}
{None: ”abc”}
{(1970,1,1): ”computer year”}
           

二、字典的基本操作

1、字典的鍵索引

        用[] 運算符可以擷取和修改鍵所對應的值

        文法:

                字典[鍵]

        示例:

d = {'name': 'tarena', 'age': 15}
print('姓名:', d['name'], '年齡:', d['age'])
           

2、添加/修改字典的元素

       字典[鍵] = 值

d = {}
d[‘name’] = "xiaoming"    # 建立新的鍵值對
d[‘age’] = 15             # 建立新的鍵值對
d[‘age’] = 16             # 修改age鍵所對應的值
           

鍵索引指派說明:

        當鍵不存在時,建立鍵并綁定鍵對應的值

        當鍵存在時,修改鍵綁定的對象

3、删除字典的元素

        del 語句 可以用來删除字典的鍵

        文法:

                del 字典[鍵]

        示例:

                d = {1:"星期一", 2:'星期二'}

                del d[2]

4、in 運算符(成員資格判斷運算符)

        1. 可以用in運算符來判斷一個鍵是否存在于字典中,如果存在則傳回True,否則傳回False

        2. not in 與 in 相反

示例:
d = {1: "One", 2: "Two", "三": 'Three'}
1 in d      # True
'二' in d   # False
3 not in d  # True
'One' in d  # False
  
           

5、字典的疊代通路(疊代出來的都是鍵)

        字典是可疊代對象,字典隻能對鍵進行疊代通路

示例:
    d = {1: "One", 2: "Two", "三": 'Three'}
    for k in d:
        print(k, '對應的值是:', d[k])
           

三、字典的方法

函數 說明
D代表字典對象
D.clear() 清空字典
D.pop(key) 移除鍵,同時傳回此鍵所對應的值
D.copy() 傳回字典D的副本,隻複制一層(淺拷貝)
D.update(D2) 将字典 D2 合并到D中,如果鍵相同,則此鍵的值取D2的值作為新值
D.get(key, default) 傳回鍵key所對應的值,如果沒有此鍵,則傳回default
D.keys() 傳回可疊代的 dict_keys 集合對象
D.values() 傳回可疊代的 dict_values 值對象
D.items() 傳回可疊代的 dict_items 對象

示例:

人工智能(python)開發 —— 字典(dict)
人工智能(python)開發 —— 字典(dict)
人工智能(python)開發 —— 字典(dict)

D.get(100,”沒有此鍵值對”)     # 如果沒有100這個key,傳回”沒有此鍵值對”

四、字典推導式

        字典推導式是用可疊代的對象依次生成字典的表達式

        文法:

                { 鍵表達式: 值表達式 for 變量 in 可疊代對象 [if 真值表達式]}

                注: [] 及其中的内容代表可省略

        說明:

                1. 先從可疊代對象中取值

                2. 用變量綁定

                3. 用if 進行條件判斷,如果為真值則執行下一步

                4. 執行'鍵表達式'和 '值表達式' 然後加入到新字典中

        示例:

            生成一個字典,鍵為1~9的整數,值為鍵的平方

d = {x: x **2 for x in range(1, 10)}
           

五、字典與清單的比較

1、字典和清單

        1. 都是可變對象

        2. 索引方式不同,清單用整數索引,字典用鍵索引

        3. 字典的查找速度可能會快于清單(重要)

        4. 清單的存儲是有序的,字典的存儲是無序的

2、清單 和字典 的内部存儲原理

        清單,順序存儲

        字典,映射存儲

六、練習集

1、第一題

        No = [1001, 1002, 1005, 1008],names = ['Tom', 'Jerry', 'Spike', 'Tyke'],用上面No清單中的資料作為鍵,用names中的資料作為值,生成相應的字典:

        如:d = {1001: 'Tom', 1002: 'Jerry', ....}

# 方法1:
    d = {No[i]: names[i] for i in range(len(No))}
  # 方法2:
    d = {n: names[No.index(n)] for n in No}
           

2、第二題

        輸入一些單詞和解釋,将單詞作為鍵,将解釋作為值,将這些資料輸入到字典中,當輸入空的單詞時結束輸入;然後,輸入查詢的單詞,給出單詞對應的解釋。

print("詞典錄入...")
dictionaries = []
while True:
    word = input("請輸入單詞:")
    if not word:
        print("詞典錄入完畢!!")
        break
    translate = input("請輸入" + word + "的解釋:")
    dictionaries = {word: translate}

print("單詞查詢...")
while True:
    word = input("請輸入查詢的單詞:")
    if not word:
        break
    print(dictionaries.get(word))   # 查詢不到 則傳回None
           

3、第三題

輸入任意個學生的資訊:

學生資訊有:

        姓名(字元串str)

        年齡(整數int)

        成績(整數int)

當輸入學生姓名為空時結束輸入

    1) 将每個學生的資訊形成字典,存于清單L 中:

      如:

      [{'name':'xiaozhang', 'age':20, 'score':97},

       {'name':'xiaoli', 'age':18, 'score':95},

       ....

      ]

    2) 以表格的形式列印所有學生的資訊,如下:

       +---------------+----------+----------+

       |      name         |    age       |  score     |

       +---------------+----------+----------+

       |   xiaozhang     |    20        |    97        |

       |    xiaoli            |    18        |    95        |

       |    ......                |   ...          |   ...           |

       +---------------+----------+----------+

students_info = []
while True:
    n = input("請輸入姓名:")
    if not n:
        break
    a = int(input("請輸入年齡:"))
    s = int(input("請輸入成績:"))
    students_info.append({"name": n, "age": a, "score": s})

print("""+---------------+----------+----------+
|      name     |    age   |  score   |
+---------------+----------+----------+""")
for x in students_info:
    print("+",
          (x.get("name")).center(15),
          "|",
          str(x.get("age")).center(10),
          "|",
          str(x["score"]).center(10),
          "|",
          sep='')
print("""+---------------+----------+----------+""")
           

繼續閱讀