python學習筆記day5:字典及字典操作

數據類型劃分:可變數據類型,不可變數據類型
不可變數據類型 :元祖,bool,int,str,可哈西
可變數據類型:list,dict,set 不可哈西
dict的key:必須是不可變數據類型
dict的value:任意數據類型
dict優點: 二分查找,存儲大量關係型數據,
dict特點:在3.5版本之前是無序的,在3.6版本及以後是有序的

dic = {
    'name': ['大飛', '小飛'],
    'py': [{'num': 7,
           'avg_age': 16}],
    True: 1,
    (1, 2, 3): 'jerry',
    2: '二哥',
}

1.字典操作:增添
直接添加:對於已經存在的key會覆蓋掉之前的value
setdefault(key, value ):若已經存在了key不會覆蓋之前的value

dic1 = {"name": "jerry", "age": 18, "sex": "male", }
dic1["high"] = 185                       # 沒有的key增加
dic1["age"] = 16                         # 已有的key覆蓋
dic1.setdefault("weight", 100)           # 沒寫value默認爲None
dic1.setdefault("age", 20)               # 若已經存在key不做覆蓋
print(dic1)

2.字典操作:刪除
pop(key, 自定義返回值):會返回刪除的value值,如果沒有傳入參數會報錯,返回值可以自動以,如果沒有找到對應的key值,需要設置自定義返回值。自定義值只有在找不到對應key時,纔會代替返回值
popitem():無參數,在3.5之前的版本爲隨機刪除,在3.6之後的版本爲默認刪除最後一個key
clear():清除整個字典
del dic[‘name’ ]:作爲關鍵字根據key值來刪除,找不到會報錯,所以不常用

print(dic2.pop("age"))               # 有返回值爲刪除的value
print(dic2.pop("hallo", '沒有此鍵'))  # 刪除不知道有沒有的key時,可設置返回值None
# print(dic2.pop())                  # 如果沒有傳參數會直接報錯
# print(dic2)
# print(dic2.popitem())              # 刪除最後一個
# dic2.clear()                       # 清空
# del dic2['name1']                  # 沒有該key會報錯所以不常用
del dic2                             # 刪除整個字典,使dic2不存在
print(dic2)

3.字典操作:修改
直接修改:類似於增添針對存在的key值會覆蓋原始的value
dic2.update(dic1)會表把字典dic1中有但是dic2中沒有的key添加到dic2中,已經存在於兩個字典的key,則將dic1中的value複製到dic2中

dic1["age"] = 16                     # 已有的key覆蓋
dic = {'name': "Tony", 'wight': 120, }
dic1 = {"name": "jerry", "age": 18, "sex": "male", }
dic.update(dic1)

4.1字典操作:查詢
直接查詢:字典的key,value的值爲列表,如果查詢item爲元組類型

dic1 = {"name": "jerry", "age": 18, "sex": "male", }
print(dic1.keys(), type(dic1.keys()))      # 列表
print(dic1.values(), type(dic1.values()))  # 列表
print(dic1.items(), type(dic1.items()))    # 元組
for i in dic1:   # 默認打印出的是key
     print(i)
 for i in dic1.values():
     print(i)

4.2插入一個面試賦值題:一行代碼修改a,b的賦值,賦值語句會自動判斷前後的變量數目來確定後面的最小單位。

a = 1
b = 2
a, b = b, a
print(a, b)
a, b = [1, 2]      # 相當於自動識別,判斷最小單位,一一對應
a, b = [1, 2], [2, 3]

4.3同理就可以去除掉字典中item的括號

for a,b in dic1.items():
#    a, b = i
    print(a,b)

4.4字典查詢:get()
直接查詢:如果沒有找到相應key值會報錯
get(key, 自定義返回值)類似與刪除的pop()如果沒有找到相對應的key值,可以自頂一個返回值,這樣可以避免報錯的發生,比較實用

# print(dic["name1"])                 # 找不到會報錯
print(dic.get('name1', '沒有這個鍵'))  # 找不到不會報錯

5.字典嵌套:字典中可以嵌套各種其他類型數據

dic = {
    'name': ['jerry', 'tony', 'hello'],
    'py': {
        'time': '5.4',
        'money': 15000,
        'addr': 'CBD',
    },
    'age': 21,
}

dic['age'] = 45
dic['name'].append('jake')
dic['name'][1] = dic['name'][1].upper()
print(dic['name'])
dic['py'].setdefault('weather', 'sunny')
print(dic['py'])

6.作業示例:將一段字符串中的數字個數計算出來,包括連在一起的多位數字按一個處理。
解決思路:將字母類型的詩句全部替換爲空然後再按空分割,最後計算分出的個數即可

info = input('>>>')  # asdasd123asdqwe7845dsa56

for q in info:
    if q.isalpha():
        info = info.replace(q, ' ')
l = info.split()
print(len(l))

7.在字典中刪除key中包括‘k ’的元素:字典是無法再for循環中刪除元素的

# 新建字典存值
dic1 = {'kl': 'a1', 'km': 'a2', 'ml': 'a3', }
dic2 = {}
for i in dic1:
    if 'k' not in i:
        dic2.setdefault(i, dic1[i])
    else:
        pass
print(dic2)
# 將被刪key存入列表中在進行刪除
dic1 = {'kl': 'a1', 'km': 'a2', 'ml': 'a3', }
li1 = []
for i in dic1:
    if 'k' in i:
        li1.append(i)
for j in  li1:
    dic1.pop(j)
print(dic1)

8.字典
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章