1. 程式人生 > >十四、字典的初識和使用

十四、字典的初識和使用

fault fir 球類 head ring second -c 但是 三種

一、字典的初識

  • 字典的初識:

    • why:

      • 列表可以存儲大量的數據,數據之間的關聯性不強

        • [‘太白‘,18,‘男‘,‘大壯‘,3,‘男‘]

      • 列表的查詢速度比較慢

    • 容器型數據類型:dict

    • how:

      • 數據類型的分類(可變與不可變):

        • 可變(不可哈希)的數據類型:list、dict、set

        • 不可變(可哈希)的數據類型:str、bool、int、tuple

      • 字典:{}括起來,以鍵值對形式存儲的容器型數據類型


        dic = {‘太白‘:
        {‘name‘: ‘太白金星‘,‘age‘: 18, ‘sex‘: ‘男‘},
        ‘python22期‘:
        [‘朱光亞‘, ‘大壯‘, ‘雪飛‘, ‘岑哥‘],
        }
      • 鍵必須是不可變的數據類型:str、int (bool、tuple幾乎不用)

      • 值可以是任意數據類型,對象

      • 字典在3.5版本之前(包括3.5)是無序的

      • 字典在3.6版本會按照初次建立字典的順序排列,學術上不認為是有序的

      • 字典在3.7版本以後都是有序的

      • 字典的優點:查詢速度非常快,存儲關聯性的數據

      • 字典的缺點:以空間換時間

  • 字典的創建方式:(面試會考:三種創建字典的方式)

    • 方式一:


      # 方式一:
      dic = dict(((‘one‘, 1), (‘two‘, 2), (‘three‘, 3)))
      print(dic)
      #結果:{‘one‘: 1, ‘two‘: 2, ‘three‘: 3}
    • 方式二:


      # 方式二:
      dic = dict(one=1, two=2, three=3)
      print(dic)
      #結果:{‘one‘: 1, ‘two‘: 2, ‘three‘: 3}
    • 方式三:


      # 方式三:
      dic = dict({‘one‘: 1, ‘two‘: 2, ‘three‘: 3})
      print(dic)
      #結果:{‘one‘: 1, ‘two‘: 2, ‘three‘: 3}
  • 驗證字典的合法性:


    dic = {[1,2,3]: ‘alex‘, 1: 666} # 鍵要不可變的數據類型,list為可變數據類型
    print(dic)
    dic = {1: ‘alex‘, 1: ‘太白‘, 2: ‘wusir‘} # 鍵要唯一
    print(dic)

  

二、字典的操作(增刪改查)

字典的增刪改查

  • 增:

1.直接增加:dic[‘sex‘] = ‘男‘

? 有則改之,無則增加


dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
dic[‘sex‘] = ‘男‘
#{‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘], ‘sex‘: ‘男‘}
?
dic[‘age‘] = 23
# 改:{‘name‘: ‘太白‘, ‘age‘: 23, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
?
print(dic)

2.setdefault:設置默認值

? dic.setdefault()

? 有則不變,無則增加


dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
dic.setdefault(‘hobby‘)
#{‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘], ‘hobby‘: None}
?
dic.setdefault(‘hobby‘, ‘球類運動‘)
#{‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘], ‘hobby‘: ‘球類運動‘}
?
dic.setdefault(‘age‘, 45)
#{‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
print(dic)

  • 刪:

1.pop:按照鍵刪除鍵值對,有返回值。

? 若設置第二個參數,則字典中有無此鍵都不報錯

? dic.pop()


dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
dic.pop(‘age‘)
#{‘name‘: ‘太白‘, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
?
ret = dic.pop(‘age‘) #返回值是 18
ret = dic.pop(‘hobby‘,‘沒有此鍵‘) #雖然沒有hobby,但是不報錯,結果是沒有此鍵
print(ret)
print(dic)

2.clear:清空

? dic.clear()

3.del


dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
del dic[‘age‘]
#{‘name‘: ‘太白‘, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
?
del dic[‘age1‘] #報錯
print(dic)

  • 改:


    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    dic[‘name‘] = ‘alex‘
    print(dic)
    #{‘name‘: ‘alex‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}

    ?

  • 查:

1.直接查:(基本不用,了解)


dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
?
print(dic[‘hobby_list‘])
?
[‘直男‘, ‘鋼管‘, ‘開車‘]
?
print(dic[‘hobby_list1‘])
?
沒有則報錯
?

2.get


dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
l1 = dic.get(‘hobby_list‘)#[‘直男‘, ‘鋼管‘, ‘開車‘]
l1 = dic.get(‘hobby_list1‘,‘沒有此鍵sb‘) # 可以設置返回值
print(l1)

三、三個特殊的

  • keys() 所有的鍵


    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    print(dic.keys(),type(dic.keys()))
    # dict_keys([‘name‘, ‘age‘, ‘hobby_list‘]) <class ‘dict_keys‘>

    可以轉化為列表:


    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    print(list(dic.keys()))
    #[‘name‘, ‘age‘, ‘hobby_list‘]
    #就是把鍵拿出來,形成列表

    #豎著一個個輸出鍵
    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    for key in dic.keys():
    print(key)
    #結果:
    name
    age
    hobby_list
    ?
    for key in dic:
    print(key)
    #結果:
    name
    age
    hobby_list

    ? values() 所有的值


    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    print(dic.values())
    #dict_values([‘太白‘, 18, [‘直男‘, ‘鋼管‘, ‘開車‘]])
    print(list(dic.values()))
    #[‘太白‘, 18, [‘直男‘, ‘鋼管‘, ‘開車‘]]
    #就是把值拿出來,形成列表

    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    for value in dic.values():
    print(value)
    #結果:
    太白
    18
    [‘直男‘, ‘鋼管‘, ‘開車‘]
    ?
    for value in dic:
    print(value)
    #結果:
    太白
    18
    [‘直男‘, ‘鋼管‘, ‘開車‘]

    ? items() 所有的鍵值對


    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    print(dic.items())
    #dict_items([(‘name‘, ‘太白‘), (‘age‘, 18), (‘hobby_list‘, [‘直男‘, ‘鋼管‘, ‘開車‘])])

    dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘鋼管‘, ‘開車‘]}
    for key,value in dic.items():
    print(key,value)
    #結果:
    name 太白
    age 18
    hobby_list [‘直男‘, ‘鋼管‘, ‘開車‘]

    #面試題:實現a,b值的互換
    a = 18
    b = 12
    a,b = b,a
    print(a,b)

    練習題:


    dic = {‘k1‘: "v1", "k2": "v2", "k3": [11,22,33]}
    # 請在字典中添加一個鍵值對,"k4": "v4",輸出添加後的字典
    dic.setdefault(‘k4‘,‘v4‘)
    print(dic)
    ?
    # 請在修改字典中 "k1" 對應的值為 "alex",輸出修改後的字典
    dic[‘k1‘] = ‘alex‘
    print(dic)
    ?
    # 請在k3對應的值中追加一個元素 44,輸出修改後的字典
    dic[‘k3‘].append(44)
    print(dic)
    ?
    ?
    dic.get(‘k3‘).append(44)
    print(dic)
    ?
    # 請在k3對應的值的第 1 個位置插入個元素 18,輸出修改後的字典
    dic[‘k3‘].insert(0,18)
    print(dic)

四、字典的嵌套

字典的嵌套


dic = {
‘name‘: ‘汪峰‘,
‘age‘: 48,
‘wife‘: [{‘name‘: ‘國際章‘, ‘age‘: 38},],
‘children‘: {‘girl_first‘: ‘小蘋果‘,‘girl_second‘: ‘小怡‘,‘girl_three‘: ‘頂頂‘}
}
?
# 1. 獲取汪峰的名字。
print(dic.get(‘name‘))
?
# 2.獲取這個字典:{‘name‘:‘國際章‘,‘age‘:38}。
print( dic.get(‘wife‘)[0])
?
# 3. 獲取汪峰妻子的名字。
l1 = dic.get(‘wife‘)
dic2 = l1[0]
print(dic2.get(‘name‘))
?
#第二種:
s = dic[‘wife‘][0][‘name‘]
print(s)
# 4. 獲取汪峰的第三個孩子名字。
dic1 = dic.get(‘children‘)
print(dic1.get(‘girl_three‘))
?
#第二種:
print(dic.get(‘children‘).get(‘girl_second‘))
?

五、今日總結

  • 字典:查詢速度快,數據的關聯性強

    • 鍵不可變的數據類型,(str、int),唯一

    • 值:任意數據類型,對象

    • 增刪改查 ***

    • 字典的嵌套 ***

十四、字典的初識和使用