目錄
一、字典
1、概念及內(nèi)存圖
2、基本操作
(1)創(chuàng)建
(2)添加
(3)刪除
(4)遍歷
3、列表list和字典dict互相轉(zhuǎn)換
4、練習(xí)
二、容器小結(jié)
1、種類(lèi)與特征
2、Python語(yǔ)言有哪些數(shù)據(jù)類(lèi)型
3、序列與散列
4、語(yǔ)法
三、練習(xí)1
一、字典
1、概念及內(nèi)存圖
列表:由一系列變量組成的可變序列容器
字典:由一系列鍵值對(duì)組成的可變散列容器
字典優(yōu)勢(shì):利用(內(nèi)存)空間,換?。–PU查找)時(shí)間
? ? ? ?鍵key? 必須唯一且為不可變數(shù)據(jù)(字符串,數(shù)字,元組),若相同,第二個(gè)相同的key覆蓋第一個(gè)(通過(guò)不可變保證唯一性)
? ? ? 值value 沒(méi)有限制
2、基本操作
(1)創(chuàng)建
# 列表善于存儲(chǔ)單一緯度數(shù)據(jù)
list_name = ["麗麗","紅紅","嘿嘿"]
list_age = [20, 54, 56]
list_sex = ["女", "男", "女"]
# 字典善于存儲(chǔ)多個(gè)維度數(shù)據(jù)
# 創(chuàng)建方法1:字典名 = {鍵1:值1,鍵2:值2}
dict_ll = {"name":"麗麗", "age":"20", "sex":"女"} dict_hh= {"name":"紅紅", "age":"54", "sex":"男"} dict_hs = {"name":"嘿嘿", "age":"56", "sex":"女"}
創(chuàng)建方法2:字典名 = dict (容器)
# 需要保質(zhì)容器的每個(gè)元素必須能一分為二
list_name = ["麗麗","紅紅","嘿嘿"]
print(dict(list_name))
(2)添加
添加,其實(shí)就是修改(如果key在,就是修改,如果key不在,就是添加)
添加方法:字典名[鍵] = 值
dict_ll = {"name":"麗麗", "age":"20", "sex":"女"}
dict_ll["money"] = 10000
# 定位快,修改
dict_ll["age"] = 26
# 讀取,先判斷,再讀取 print(dict_ll["age"])
注意:dict中根據(jù)key找value,直接定位,?字典名[鍵]
? ? ? ? ? ? ? ? ? ? ?根據(jù)value找key,則需要一一遍歷
(3)刪除
del 字典名[鍵1],字典名[鍵2]? 刪除后鍵值對(duì)同步消失
(4)遍歷
dict_ll = {"name":"麗麗", "age":"20", "sex":"女"} # 所有key for key in dict_ll: print(key) ''' name age sex ''' # 所有key for key in dict_ll.keys(): print(key) ''' name age sex ''' # 所有value for value in dict_ll.values(): print(value) ''' 麗麗 20 女 ''' # 所有鍵和值 for item in dict_ll.items(): print(item) ''' ('name', '麗麗') ('age', '20') ('sex', '女') ''' # 等價(jià)于 for key,value in dict_ll.items(): # 上述的拆包 print(key,value) ''' name 麗麗 age 20 sex 女 ''' # 默認(rèn)打印只有key值 print(dict_ll) #['name', 'age', 'sex'] print(dict_LL.items())
3、列表list和字典dict互相轉(zhuǎn)換
dict_ll = {"name":"麗麗", "age":"20", "sex":"女"} # dict轉(zhuǎn)list print(list(dict_ll.items())) # [('name', '麗麗'), ('age', '20'), ('sex', '女')] # list轉(zhuǎn)dict print(dict([('name', '麗麗'), ('age', '20'), ('sex', '女')])) # {'name': '麗麗', 'age': '20', 'sex': '女'
4、練習(xí)
# 疫情信息
list_epidemic = [
{
"region": "臺(tái)灣", "new": 16,
"now": 2339, "total": 16931,
},
{
"region": "陜西", "new": 182,
"now": 859, "total": 1573,
},
{
"region": "浙江", "new": 2,
"now": 505, "total": 2008,
},
]
# --打印所有疫情信息
for i in range(len(list_epidemic)):
print(list_epidemic[i]["region"])
print(list_epidemic[i]["new"])
# 優(yōu)化
for item in list_epidemic:
print(item["region"])
print(item["new"])
# --查找新增人數(shù)大于10的地區(qū)名稱(chēng)(將結(jié)果存入新列表)
new_list = []
for i in range(len(list_epidemic)):
if list_epidemic[i]["new"]>10:
new_list.append(list_epidemic[i]["region"])
print(new_list)
# 優(yōu)化
new_list = []
for item in list_epidemic:
if item["new"] > 10:
new_list.append(item["new"])
# --查找現(xiàn)有人數(shù)最大的地區(qū)信息(結(jié)果為字典)
max = list_epidemic[0]["now"]
flag = 0
for i in range(0,len(list_epidemic)):
if max <= list_epidemic[i]["now"]:
max = list_epidemic[i]["now"]
flag = i
print(list_epidemic[flag])
list_epidemic = [
{
"region": "臺(tái)灣", "new": 16,
"now": 2339, "total": 16931,
},
{
"region": "陜西", "new": 182,
"now": 859, "total": 1573,
},
{
"region": "浙江", "new": 2,
"now": 505, "total": 2008,
},
]
# --根據(jù)現(xiàn)有人數(shù)對(duì)疫情信息降序(大->小)排列
for i in range(len(list_epidemic)):
for j in range(i+1,len(list_epidemic)):
if list_epidemic[i]["now"] < list_epidemic[j]["now"]:
list_epidemic[i],list_epidemic[j]=list_epidemic[j],list_epidemic[i]
二、容器小結(jié)
1、種類(lèi)與特征
????????字符串:存儲(chǔ)字符編碼(a-97),不可變,序列
????????列表list:存儲(chǔ)變量(地址),可變,序列
????????元組tuple:存儲(chǔ)變量(地址),不可變,序列
????????字典dict:存儲(chǔ)鍵值對(duì),可變,散列
# 字典想拿到第一個(gè)鍵值對(duì) 轉(zhuǎn)換為列表/元組
dict_ll = {"name":"麗麗", "age":"20", "sex":"女"}
list_key = list(dict_ll()) # 拿到的只有鍵
print(list_key)
key = list_key[0]
value = dict_ll[key]
list_item = list(dict_ll.items())
print(list_item[0])
# 轉(zhuǎn)成元組更好,省內(nèi)存
tuple_item = tuple(dict_ll.items())
print(tuple_item[0])
2、Python語(yǔ)言有哪些數(shù)據(jù)類(lèi)型
????????可變類(lèi)型:預(yù)留空間+自動(dòng)擴(kuò)容
??? ????????如:列表list,字典dict
??? ????????優(yōu)點(diǎn):操作數(shù)據(jù)方便(能夠增刪改)
??? ????????缺點(diǎn):占用內(nèi)存太大
? ? ? ? 不可變類(lèi)型:按需分配
??? ????????如:int,float,bool,str,tuple
??? ????????優(yōu)點(diǎn):占用內(nèi)存小
??? ????????缺點(diǎn):不能適應(yīng)現(xiàn)實(shí)的變化
3、序列與散列
????????序列:支持索引切片,定位數(shù)據(jù)靈活
????????散列:通過(guò)鍵定位數(shù)據(jù),速度最快文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-649458.html
4、語(yǔ)法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?列表? ? ? ? ? ? ? ? ? ? ? ? ? ? ?字典
?? 創(chuàng)建
??????? 列表名=[數(shù)據(jù)1,數(shù)據(jù)2]? ? ? ? ? ? ? ? ? ? 字典名={鍵1:值1,鍵2:值2}
??????? 列表名=list(容器)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 字典名=dict(容器)
?? 添加
??????? 列表名.append(元素)? ? ? ? ? ? ? ? ? ? ? ? 字典名[鍵]=值? 不可變數(shù)據(jù)才可以當(dāng)鍵
??????? 列表名.insert(索引,元素)
?? 定位
??????? 列表名[整數(shù)]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 字典名[鍵]
??????? 列表名[開(kāi)始:結(jié)束:間隔]
?? 刪除
???????? del 列表名[索引或切片]? ? ? ? ? ? ? ? ? ? del 字典名[鍵] ,鍵值都刪除
???????????????? 注意索引越界
???????? 列表名.remove(數(shù)據(jù))
???????????????? 注意數(shù)據(jù)必須存在于列表中
?? 遍歷
??????? for item in 列表名:? ? ? ? ? ? ? ? ? ? ? ? ? ? for key in 字典:
??????? for i range(len(列表名)):? ? ? ? ? ? ? ? ? ?for value in 字典.values():
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?for k,v in 字典.items():?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-649458.html
三、練習(xí)1
# 2. 在終端中獲取顏色(RGBA),打印描述信息,
# 否則提示顏色不存在
# "R" -> "紅色"
# "G" -> "綠色"
# "B" -> "藍(lán)色"
# "A" -> "透明度"
dict_rgb = {"R":"紅色", "G":"綠色", "B":"藍(lán)色", "A":"透明度"}
input_rgb = input("請(qǐng)輸入顏色:")
if input_rgb in dict_rgb:
print(dict_rgb[input_rgb])
else:
print("不存在")
# 3. 將列表中的數(shù)字累減
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
sum_last = list02[0]
for i in range(1, len(list02)):
sum_last -= list02[i]
print(sum_last)
# 4. 在列表中查找最大值(不使用max,自定義算法實(shí)現(xiàn))
# 思路:
# 假設(shè)第一個(gè)元素就是最大值
# 依次與后面元素進(jìn)行比較
# # 如果發(fā)現(xiàn)更大值,則替換
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
max = list02[0]
for item in list02:
if max < item:
max = item
print(max)
# 5. (選做)彩票:雙色球
# 紅色:6個(gè) 1--33之間的整數(shù) 不能重復(fù)
# 藍(lán)色:1個(gè) 1--16之間的整數(shù)
# 1) 隨機(jī)產(chǎn)生一注彩票(列表(前六個(gè)是紅色,最后一個(gè)藍(lán)色))
# 2) 在終端中錄入一支彩票
# 要求:滿足彩票的規(guī)則.
import random
list_lottery = []
for i in range(6):
num = random.randint(1,33)
while num in list_lottery:
num = random.randint(1, 33)
list_lottery.append(num)
list_lottery.append(random.randint(1,16))
# 優(yōu)化
import random
list_lottery = []
while len(list_lottery) < 6:
num = random.randint(1, 33)
if num not in list_lottery:
list_lottery.append(num)
list_lottery.append(random.randint(1,16))
# 2) 在終端中錄入一支彩票
# 要求:滿足彩票的規(guī)則.
list_lottery = []
i = 1
while i <= 6:
num = int(input(f"請(qǐng)錄入紅色第{i}注彩票:"))
if 1 < num < 33:
if num not in list_lottery:
list_lottery.append(num)
i += 1
else:
print("不能重復(fù),請(qǐng)重新輸入")
else:
print("您輸入的數(shù)字超出范圍1-33,請(qǐng)重新輸入")
while True:
num2 = int(input(f"請(qǐng)錄入藍(lán)色第{i}注彩票:"))
if 1 < num2 < 6:
list_lottery.append(num2)
break
else:
print("您輸入的數(shù)字超出范圍1-6,請(qǐng)重新輸入")
print(f"下注為{list_lottery}")
到了這里,關(guān)于Python系統(tǒng)學(xué)習(xí)1-7-字典的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!