A. python自學筆記13:元組和字典的操作
定義元組(tuple):
t1=(1,2,3,4)#多個數據元組
t2=(1,)#如果元組內只有一個數據,也需要手逗號隔開,否則這個數據將是他本身的類型。
元組的操作:
元組類型數據不支持修改,可查找
查找:
按下標查找:
print(t1[1])
函數查找:
print(t1.index(1))返回對應下標,如果數據不存在,程序將報錯
print(t1.count(1))統計數據在元組當中出現的次數
print(len(t1))統計元組當中的數據個數
注意:當元組內嵌套列表數據,可以通過下標的方法對列表數據進行修改如:
t3=(1,2,["a","b"])
t3[2][0]=c #t3的值將變為(1,2,["c","b"])
——————————————————
——————————————————
定義字典(dict)
字典的特點
1:符號為{}
2:數據為鍵(key)值(value)對形式,每個鍵值對之間用逗號隔開如:
dict1={"name":"小明","age":18,"gender:男"}
字典的操作:
dict1["name"]="小紅"
dict1["id"]=3
如果key存在,將修改其所對應的值。如果不存在,將在字典最後添加該鍵值對
2.刪除數據
del():刪除字典或刪除字典內的鍵值對
del dict1["name"] 刪除字典內的鍵值對,如果刪除的key不存在,程序將會報錯
del(del)刪除字典
clear(dict1) 清空字典
3.查找數據
一.按照key進行查找,最後返回相對應的值
二.按函數進行查找:
(1) get(key,默認值):
如果查找的key不存在則返回所寫的默認值,如果不寫默認值則返回None
dict1={"name":"小明","age":18,"gender:男"}
print(dict1.get("name")) #小明
print(dict1.get("id",110)) # 110
——————————————————
(2) keys():返回字典內的所有key 可用for遍歷
print(dict1.keys())
返回 ["name","age","gender"]
for key in dict1.keys():
..print(key)
逐行輸出name age gender
——————————————————
(3) values(): 返回字典內的值 可用for遍歷
print(dict1.values())
返回["小明",18,"男"]
for value dict1.values():
..print(value)
逐行輸出小明 18 男
——————————————————
(4) items():將字典內的數據以元組的形式返回
print(dict1.items()) 可用for遍歷
返回[("name","小明"),("age",18),("gender","男")]
for item in dict1.items():
..print(item)
逐行輸出 ("name","小明") ("age",18)("gender","男")
——————————————————
遍歷字典鍵值對(拆包) 可在for內使用兩個臨時變數
dict1={"name":"小明","age":18,"gender:男"}
for key,value in dict1.items():
..print(f"{key}=value")
逐行輸出:
name=小明 age=18 gender=男
B. python 字典問題
首先,你這個for循環體中的if結構,它的兩個分支都包含了return,那麼,無論if的表達式是真還是假,都會return。
那麼,就是說,這個for第一次循環就必然會遇到一個return。
所以,不會循環第二次,也就不會匹配到字典中value為'2009'的那一條了。
實際上的運行過程中,第一次key為'172.29.92.160',與host不能匹配,執行了returnprint('Nonevalue!')這一句。
這里,print('Nonevalue!')會產生一個輸出行,內容為'Nonevalue!';
然後return的是print()的結果,而print()是沒有返回值或者說返回值是None,因此,這個conportnum()的返回值就是None
所以你看到了兩行輸出,第一行是函數中print()語句產生的輸出,第二行是函數conportnum()的結果值。
你這個函數的功能就是從字典中尋找key為指定值的項,可以這樣做:
portnum={"172.29.92.160":'2010',
"172.29.92.159":'2009',
}
port=portnum.get('172.29.92.159')
ifnotport:
#沒有匹配項
else:
#對應埠在port中
如果有默認埠,匹配不到則使用的默認埠的話:
DEFAULT_PORT='8080'
portnum={"172.29.92.160":'2010',
"172.29.92.159":'2009',
}
port=portnum.get('172.29.92.159',DEFAULT_PORT)
#對應埠在port中
C. python中字典常用的方法有哪些,分別有什麼作用
寫法:字典序列[key] = 值 ***字典為可變類型
常用方法:
1、# 新增字典中的數據
dict1 = {'name':'huu','age':20,'gender':'男'}
dict1['id'] = 133
print(dict1)
2、# 修改字典中的數據
dict1['name'] = 'xiauaiguai'
print(dict1)
3、刪除字典或刪除字典中指定鍵值對
del()/del:
dict1 = {'name':'huanghu','age':30,'gender':'男'}
# del(dict1) 直接將字典刪除了,運行報錯
del dict1['name']
print(dict1)
# del dict1[names] 刪除不存在的key,運行報錯
4、清空字典
clear():
dict1.clear() # 清空字典
print(dict1)
5、查找
key值查找
如果當前查找的key存在則返回對應的值,否則則報錯
函數查找
get():如果當前查找的key不存在則返回第二個參數值(默認值),
如果省略第二個參數則返回 None
key()
dict1 = {'name':'huhu','age':20,'gender':'男'}
print(dict1['name']) # huhu
print(dict1['id']) # 報錯
# 1, get()查找
print(dict1.get('name')) # huanghu
print(dict1.get('id',133)) # 133--如果當前查找的key不存在則返回第二個參數值(默認值)
print(dict1.get('id')) # None--如果省略第二個參數則返回 None
# 2, keys() 查找字典中所有的key,返回可迭代對象
print(dict1.keys()) # dict_keys(['name', 'age', 'gender'])
# 3,values() 查找字典中所有的values,
print(dict1.values()) # dict_values(['huanghu', 30, '男'])
# 4, items() 查找字典中所有的鍵值對,返回可迭代對象,裡面的數據是元組,
元組數據1是字典中的key,元組數據2是字典key對應的值
print(dict1.items()) # dict_items([('name', 'huahu'), ('age', 20), ('gender', '男')])
D. python字典的基本操作
python字典的基本操作如下:
查詢字典
字典裡面可以嵌套字典,嵌套列表。
E. Python其實很簡單 第十章 字典與集合
前面介紹的列表和元組都是有序序列,而字典與集合屬於無序序列,也就是說,不能通過索引來操作元素。
10.1 字典
語法格式:
dictionary= {key1 : value1, key2 : value2, key3 : value3 ,...., key n : value n }
其中,dictionary是字典名稱,key表示元素的鍵,value表示元素的值,鍵和值必須是成對的。
如:
>>> dict1 = { 'abc': 123, 98.6: 37 }
>>> dict1
{'abc': 123, 98.6: 37}
可以看出,鍵可以是字元串、數字或者元組,但必須是唯一的;而值可以是任何數據類型,也沒有要求是唯一的。
1、創建字典的方法
方法一:同時給定鍵和值,即「關鍵字參數」形式。
dictionary=dict(key1=value1,key2=value2,.....,key n=value n)
注意:這里的key 必須符合Python標識符的命名規則。
例:
先使用「{}」創建字典:
>>> dict1={1:'一',2:'二',3:'三',4:'四',5:'五'}
>>> dict1
{1: '一', 2: '二', 3: '三', 4: '四', 5: '五'}
再通過「關鍵字參數」形式創建:
>>> dict1=dict(1='一',2='二',3='三',4='四',5='五')
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
創建不成功,原因在於key 不符合Python標識符的命名規則。前面已經介紹過,標識符不能用數字表示或者用數字打頭。
現在對鍵如下修改:
>>> dict1=dict(n1='一',n2='二',n3='三',n4='四',n5='五') #在數字前加了一個字元」n」
>>> dict1
{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五'}
方法二 :使用已經存在的元組和列表通過映射函數創建字典。
格式:dictionary=dict(zip(tuplekey,listvalue))
例:
>>> tuplekey=('n1','n2','n3','n4','n5') #鍵的序列採用元組
>>> listvalue=['一','二','三','四','五'] #值的序列採用列表
>>> dict1=dict(zip(tuplekey,listvalue))
>>> dict1
{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五'}
注意:tuple(listname)函數可以將列表轉換為元組,list(tuplename)函數可以將元組轉換為列表。
2、通過鍵訪問字典
直接獲取鍵的相應元素的值
>>> dict1['n2']
'二'
利用get()方法
>>> dict1.get('n2')
'二'
get()方法也可以帶參數,當要訪問的鍵不存在時返回一個字元串。如:
>>> dict1.get('n0','can't find!') #當要查找的鍵不存在,返回'can't find!'
"can't find!"
3、遍歷字典
使用字典對象的items()方法可以獲取字典的「鍵.值對」列表。
>>> for item in dict1.items():
print(item)
('n1', '一')
('n2', '二')
('n3', '三')
('n4', '四')
('n5', '五')
也可以獲取具體的每個元素的鍵和值,如:
>>> for key,value in dict1.items():
print(key,'對應的是',value)
n1 對應的是 一
n2 對應的是 二
n3 對應的是 三
n4 對應的是 四
n5 對應的是 五
4、添加、修改和刪除字典元素
使用下面的語句,若指定的鍵存在,就可以修改該元素的值;若指定的鍵不存在,則添加該元素。如:
>>> dict1['n6']='六' # 鍵』n6』不存在,故添加該元素
>>> dict1
{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五', 'n6': '六'}
>>> dict1['n4']='肆' # 鍵』n4』存在,故修改該元素
>>> dict1
{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '肆', 'n5': '五', 'n6': '六'}
5、利用推導式建立字典
import random
dict1={i:random.randint(1,100) for i in range(5)}
# 生成元素的鍵為0到5整數,值為1到100之間的隨機數
print(dict1)
運行結果:{0: 28, 1: 59, 2: 79, 3: 30, 4: 88}
10.2 集合
集合是數學中一個很重要的概念,集合具有確定性、互異性、無序性三個基本屬性。在Python中,集合同樣具有這三個基本屬性,其中,確定性是指對象要麼是集合的元素,要麼不是集合的元素;互異性是指集合中的元素不能重復;無序性是指集合中的元素不分先後次序,可以隨意更換位置。
1、集合的創建
直接使用「{}」創建
>>> set1={'春','夏','秋','冬'}
>>> set1
{'秋', '春', '冬', '夏'}
>>> set2={3,2,1,4,5}
>>> set2
{1, 2, 3, 4, 5}
利用已有的列表、元組創建集合
>>> list1=['東','南','西','北']
>>> set3=set(list1)
>>> set3
{'南', '東', '北', '西'}
利用已有的集合建立一個「副本」
>>> set3
{'南', '東', '北', '西'} #set3和set4的值一樣
>>> set4=set3
>>> set4
{'南', '東', '北', '西'}
>>> set4.add('中') #給set4添加元素
>>> set4
{'西', '中', '東', '南', '北'} # 這個好理解
>>> set3
{'西', '中', '東', '南', '北'} # 意想不到吧?Set3為什麼會發生變化?
再看看簡單變數的情況:
>>> a=2
>>> b=a #是不是與前面set4=set3相似
>>> b+=1
>>> b
3
>>> a
2 #但a的值並沒有發生改變
從上面集合set3、set4和簡單變數a、b的值的變化情況對比,不難發現set3和set4是指向同一地址的對象,而變數a和變數b指向了不同地址,語句b=a是將a的值傳遞個b,並不是將a的地址傳遞給b。列表、元組、字典都和集合一樣具有這樣的性質。
所以,將set4稱為set3的「副本」更為恰當。
2、添加和刪除元素
>>> set3
{'南', '東', '北', '西'}
>>> set3.add('中') # 添加元素
>>> set3
{'西', '中', '東', '南', '北'} # 集合內的元素是無序的,不要糾結次序的變化
>>> set3.remove('中') # 刪除元素
>>> set3
{'西', '東', '南', '北'}
3、集合運算
集合運算包括交(&)、並(|)、差(-),和數學中的集合運算是一致的。
>>> set3={'南', '東', '北', '西'}
>>> set4={'西', '中', '東', '南', '北'}
>>> set3 & set4 #取set3和set4的交集
{'西', '南', '北', '東'}
>>> set3 | set4 #取set3和set4的並集
{'中', '南', '北', '西', '東'}
>>> set3 - set4 #取set3與set4的差,即set3比set4多出來的元素
set()
>>> set4 -set3 #取set4與set3的差,即set4比set3多出來的元素
{'中'}