數據類型劃分:可變數據類型,不可變數據類型
不可變數據類型 :元祖,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.字典