123132
雖然列表可以存儲(chǔ)大量的數(shù)據(jù),但數(shù)據(jù)之間的關(guān)聯(lián)性不強(qiáng)
列表的查詢速度比較慢。所以有了另一種容器型數(shù)據(jù)類型:dict。
可變的 無序的
數(shù)據(jù)類型的分類
建 不可變(可哈希 唯一的)的數(shù)據(jù)類型: str bool int tuple
值 可變(不可哈希)的數(shù)據(jù)類型:list dict set
字典:{}括起來,以鍵值對(duì)形式存儲(chǔ)的容器型數(shù)據(jù)類型:
dic = {'太白':{'name': '太白金星','age': 18, }}
鍵必須是不可變的數(shù)據(jù)類型:int , str (bool tuple幾乎不用) 唯一的。
值可以是任意數(shù)據(jù)類型,對(duì)象**。
字典3.5x版本之前(包括3.5)是無序的。 隨機(jī)顯示
字典3.6x會(huì)按照初次建立字典的順序排列,學(xué)術(shù)上不認(rèn)為是有序的。
字典3.7x以后都是有序的。
字典的優(yōu)點(diǎn):查詢速度非常快,存儲(chǔ)關(guān)聯(lián)性的數(shù)據(jù)。
字典的缺點(diǎn):以空間換時(shí)間。
哈希表
字典的創(chuàng)建方式:
- # 面試會(huì)考
# 方式一:
# dic = dict(('one', 1), ('two', 2),)
# print(dic) # {'one': 1, 'two': 2, }
?
# 方式二:
# dic = dict(one=1, two=2, )
# print(dic)
?
# 方式三:
# dic = dict({'one': 1, 'two': 2,})
# print(dic)
驗(yàn)證字典的合法性:
鍵要不可變的數(shù)據(jù)類型鍵要唯一
fromkeys()
dic=dict.fromkeys('可迭代對(duì)象',值)print(dic)#{'迭代的最小元素': 值, '迭代的最小元素': 值}
# 坑:值共有一個(gè),面試題
# dic = dict.fromkeys([1,2,3],[])#小心列表
# dic[1].append(666)
# print(dic)
?
字典的增刪改查
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '鋼管', '開車']}?
?
直接增加 有則改之,無則增加 ? # 增:# 增:# 增:# 增:
dic['要改的值的建'] = 要改的值
?
# dic.setdefault('增加的建名', 增加的值)#塞的第副的 有則不變,無則增加 定一不 先看看建存不存在 存在不添加
?
# update *** 啊普待的
# dic = {'name': '太白', 'age': 18}
# # dic.update(hobby='運(yùn)動(dòng)', hight='175')
# # dic.update(name='太白金星')
# dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')]) 更新 有則覆蓋,無則增加
?
刪
dic.pop('刪除的建','防止報(bào)錯(cuò)') #按照鍵刪除鍵值對(duì) 有返回值
設(shè)置第二個(gè)參數(shù)時(shí)候無論有沒有建 都不會(huì)報(bào)錯(cuò) 返回的是刪除的值或自定義的值
?
dic.clear() ## clear k額 清空字典中元素 **
l1={1:2}
del li將整個(gè)容器都刪除 打印會(huì)報(bào)錯(cuò)
del dic['被刪除的元素'] # del **
?
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
# 將字典中鍵含有'k'元素的鍵值對(duì)刪除。
# for key in dic:
# ? ? if 'k' in key:
# ? ? ? ? dic.pop(key)
# print(dic) #報(bào)錯(cuò)
?
# 循環(huán)一個(gè)字典時(shí),如果改變這個(gè)字典的大小,就會(huì)報(bào)錯(cuò)。
# l1 = []
# for key in dic:
# ? ? if 'k' in key:
# ? ? ? ? l1.append(key)
# print(l1)
# for i in l1:
# ? ? dic.pop(i)
# print(dic)
?
# for key in list(dic.keys()): # ['k1', 'k2', 'k3','age']
# ? ? if 'k' in key:
# ? ? ? ? dic.pop(key)
# print(dic)
?
?
dic['name'] = 'alex' # 改# 改# 改# 改# 改
?
# update *** 啊普待的
# dic = {'name': '太白', 'age': 18}
# dic.update(hobby='運(yùn)動(dòng)', hight='175')
# dic.update(name='太白金星')
#dic.update({'5':5})
# dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')]) 字典更新 有則覆蓋,無則增加 括號(hào)級(jí)別高
?
?
?
# print(dic=['查詢的建'])# 存在返回 建對(duì)應(yīng)的值 字典中沒此建會(huì)報(bào)錯(cuò)
有加減 用上面的
l1 = dic.get('查詢的建名','返回值')設(shè)置第二個(gè)參數(shù)時(shí)候無論有沒有建都不會(huì)報(bào)錯(cuò) 第2參數(shù)不傳 有此建 返回對(duì)應(yīng)的值 找不到默認(rèn)返回None ? 返回的是第2參數(shù)本身
?
?
?
?
for 循環(huán)字典打印字典的建
?
# print(dic.keys(), 加s所有的建 放在一個(gè)特殊的數(shù)據(jù)類型(高仿列表不能用索引)當(dāng)中 理解為列表
print(list(dic.keys()))# 可以轉(zhuǎn)化成列表
for key in dic.keys(): 或者for i in dic
# ? ? print(key)# ? 可以for 循環(huán)輸出建
?
values()
print(dic.values())
print(list(dic.values()))##轉(zhuǎn)為列表
for value in dic.values():
? ? print(value) ? #循環(huán)輸出值
?
items()哎特悶s
print(dic.items()) 列表形式 #循環(huán)輸出所有的key和value# for
for key,value in dic.items(): ? 元祖的拆包
? ? print(key,value) ###重要
a,b = ('name', '太白')
print(a,b)
?
?
拆包
# a = 18 ? #拆包# b = 12
# a,b = b,a#(可迭代對(duì)象)
# # a,b = 12,18
# print(a,b)
枚舉
相關(guān)練習(xí)題:
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}# 請(qǐng)?jiān)谧值渲刑砑右粋€(gè)鍵值對(duì),"k4": "v4",輸出添加后的字典
# 請(qǐng)?jiān)谛薷淖值渲?"k1" 對(duì)應(yīng)的值為 "alex",輸出修改后的字典
# 請(qǐng)?jiān)趉3對(duì)應(yīng)的值中追加一個(gè)元素 44,輸出修改后的字典
# print(dic['k3'])
# l1 = dic.get('k3')
# print(l1)
# dic.get('k3').append(44)
# print(dic)
# 請(qǐng)?jiān)趉3對(duì)應(yīng)的值的第 1 個(gè)位置插入個(gè)元素 18,輸出修改后的字典
字典的嵌套
dic = {? ?'name': '汪峰',
? ?'age': 48,
? ?'wife': [{'name': '國際章', 'age': 38},],
? ?'children': {'girl_first': '小蘋果','girl_second': '小怡','girl_three': '頂頂'}
}
?
# 1. 獲取汪峰的名字。
#
# 2.獲取這個(gè)字典:{'name':'國際章','age':38}。
#
# 3. 獲取汪峰妻子的名字。
?
# 4. 獲取汪峰的第三個(gè)孩子名字。
-
-
鍵不可變得數(shù)據(jù)類型,(str int),唯一。
-
值:任意數(shù)據(jù)類型,對(duì)象。
-
增刪改查(全部都要會(huì)默寫)***
-
字典的嵌套。***
-
?
-
轉(zhuǎn)載于:https://www.cnblogs.com/saoqiang/p/10996970.html
總結(jié)
- 上一篇: 英语常用词组
- 下一篇: 大道至简读书笔记02