1. 程式人生 > >Python基礎:字典、元組

Python基礎:字典、元組

一、概述
1.字典是一個無序的,可以修改的,元素呈鍵值對的形式,以逗號分割的,以大括號包圍的序列。

2.字典是python基礎資料型別當中唯一一個對映關係的資料型別。

3.由於字典無序,所以我們定義字典和字典生成之後的元素的順序是不同的。

4.字典的格式:
key:value 鍵值對
變數名={key1:value1,key2:value2,…}

平常我們生活中字典非常常見,一般都是由一些如偏旁部首或是拼音首字母等來查相關的字的,當我們查字典時用到的前幾頁

目錄中的偏旁部首或拼音首字母就相當於這裡的key,而查到的字就是value。

5.注意:
使用的符號都是英文,一定定義變數的時候不能定義成dict ;

字典的key只能是不可變資料型別,而value可以為任意資料型別

不可變資料型別(可雜湊資料型別,就是用雜湊演算法算出來的資料型別), 可變資料型別(不可雜湊資料型別)。

6.說明:字典和列表一樣,也能夠儲存多個數據,字典中的值並沒有特殊順序;

列表中找某個元素時,是根據下標進行的,如果下標很多,查詢資料不方;

當索引不好用時,使用字典,字典中找某個元素時字典的每個元素由2部分組成,鍵:值。

例如 ‘name’:‘班長’ ,'name’為鍵,'班長’為值,字典由鍵值組成。

二、字典操作
1.建立字典

dic={'name':'zs','age':19,'sex':'男'}
print(dic)
print(type(dic))
dic1={'name':'azy',23:'dcv',(1,2):'lyc'}
print(dic1)
#dic2={['name','sg']:'azy',23:'dcv',(1,2):'lyc'}
#TypeError: unhashable type: 'list'
{'name': 'zs', 'age': 19, 'sex': '男'}
<class 'dict'>

{'name': 'azy', 23: 'dcv', (1, 2): 'lyc'}

2.增加操作
(1)dic.setdefault()增加操作時,如果鍵在字典中已經存在了,就不會覆蓋字典中的值,如下第三行程式碼是不會對原字典的weight值進行改變的,仍為120。

dic.setdefault('weight',120)
print(dic)
dic.setdefault('weight',140)
print(dic)
{'name': 'zs', 'age': 19, 'sex': '男', 'weight': 120}
{'name': 'zs', 'age': 19, 'sex': '男', 'weight': 120}

(2)根據key來設定value,若key存在就覆蓋掉原來的值。

dic['weight']=140
print(dic)
dic['weight']=135
print(dic)
{'name': 'zs', 'age': 19, 'sex': '男', 'weight': 140}
{'name': 'zs', 'age': 19, 'sex': '男', 'weight': 135}

3.刪除操作
(1)根據key進行刪除,刪除一個鍵值對

dic.pop('sex')
print(dic)
{'name': 'zs', 'age': 19, 'weight': 135}

(2)隨機刪除一個鍵值對

dic.popitem()
print(dic)
{'name': 'zs', 'age': 19}

(3)清空字典中的鍵值對,使字典成為一個空字典dic={}

dic.clear()
print(dic)

(4)直接從記憶體中刪除字典型別的變數,列印結果會報錯

del dic
print(dic)

4.修改操作
(1)根據key來修改value

dic['name']='mm'
print(dic)
{'name': 'mm', 'age': 19}

(2)利用update方法來修改

dic2={'name':'baibai','age':20,'weight':120}
dic.update(dic2)
print(dic)
{'name': 'baibai', 'age': 20, 'weight': 120}

5.查詢操作
(1)根據key來獲取對應的value,可定義一個變數接收返回的值

v=dic.get('name')
print(v)
baibai

(2)獲取所有的key,並返回所有key組成的列表

k=dic.keys()
print(k)
dict_keys
(['name', 'age', 'weight'])

(3)獲取所有的value,並返回所有的value組成的列表

v1=dic.values()
print(v1)
dict_values(['baibai', 20, 120])

(4)以元組的的形式返回字典中的每一個鍵值對

v2=dic.items()
print(v2)
print(type(v2))
dict_items
([('name', 'baibai'), ('age', 20), ('weight', 120)])
<class 'dict_items'>

(5)獲取鍵值對的個數並返回鍵值對的個數

v3=len(dic)
print(v3)

3
(6)利用元組以及fromkeys方法生成字典

tup=(1,2,3)
ret=dic.fromkeys(tup)
print(ret)
ret2=dic.fromkeys(tup,'aa')
print(ret2)
{1: None, 2: None, 3: None}
{1: 'aa', 2: 'aa', 3: 'aa'}

6.in 和 not in
in
判斷指定的鍵是否在字典當中,即將被廢除,之後我們python3用in

for…in…
通過for … in …:的語法結構,我們可以遍歷字串、列表、元組、字典等資料結構。

not in
判斷指定的鍵是否不在字典當中

if 'name' in k:
    dic['name']='jx'
else:
    dic['name']='ngls'
print(dic)
if 'height' not in k:
    dic['height']=180
else:
    dic['height']=160
print(dic)
s1=dic.get('sex',1)
print(s1)
for i in k:
    print(i)
for key in dic:
    print(key)
for item in dic.items():
    print(item)
for key,value in dic.items():
    print(key,value)

三、字典的特點
因為字典是無序的,所以字典沒有索引值;

因為字典沒有索引值,所以字典以鍵取值,(字典的鍵相當於列表的索引);

因為字典以鍵取值,所以字典的鍵唯一且不可修改;

因為字典的鍵不可修改,所以列表和字典等可變型別的資料不可以給字典做鍵。

集合:
一、概述
‘’‘無序的可修改的序列’’’

集合與之前列表、元組類似,可以儲存多個數據,但是這些資料是不重複的(具有自動去重功能)。

集合物件還支援交集(intersection),差集(difference)、並集和對稱差集(sysmmetric_difference),即關係測試。

(集合的基本功能包括關係測試和消除重複元素)

集合定義:

變數名={元素1,元素2,元素3,…}

元素不能為可變資料型別

變數名=set(可迭代內容) 例如 變數名=set(元組,自動,字串)

可迭代內容:列表,字串,元組,字典
二、集合的操作
1.建立集合
(1)按照集合的格式直接建立

注意:True會轉換成1,False會轉換成0,集合的最大作用就是去重複,預設去掉後邊重複的

set1={'a',True,1,(1,2,3),0,False}#{0, True, 'a', (1, 2, 3)}
print(set1)
print(type(set1))
{0, 'a', True, (1, 2, 3)}
<class 'set'>

(2)用列表以及set函式生成集合

lst=[1,2]
set2=set(lst)
print(set2)
{1, 2}

(3)用字串以及set函式生成集合

str1='hello'
set3=set(str1)
print(set3)
{'l', 'e', 'h', 'o'}

(4)用元組以及set函式生成集合

tup=(1,3,4)
set5=set(tup)
print(set5)
{1, 3, 4}

(5)用字典以及set函式生成集合

{‘a’, ‘b’},字典只會輸出key值

dic={'a':13,'b':18}
set6=set(dic)
print(set6)
{'a', 'b'}

(6)建立空集合

set2=set()
print(set2)
print(type(set2))
set()
<class 'set'>

2.增加操作
(1)利用add方法新增

set1.add('舞')
print(set1)
{0, True, (1, 2, 3), 'a', '舞'}

(2)利用update方法新增

set_1={'舞','aa'}
set1.update(set_1)
print(set1)
{0, True, (1, 2, 3), 'a', '舞', 'aa'}

3.刪除操作
(1)利用pop方法隨機刪除集合中的一個元素

set1.pop()
print(set1)
{True, (1, 2, 3), 'a', '舞', 'aa'}

(2)利用remove方法指定刪除集合中的元素

set1.remove('a')
print(set1)
{True, (1, 2, 3), '舞', 'aa'}

(3)利用clear方法清空集合中的元素成為一個空集合set()

set1.clear()
print(set1)
set()

(4)利用del直接從記憶體中刪除集合

輸出會報錯

del set1
print(set1)

4.遍歷集合

for i in set1:
    print(i)
True
(1, 2, 3)
舞
aa

三、關係測試
1.交集(&或intersection,取公共部分)

se={1,2,3,4}
se1={3,4,5,6}
print(se&se1)
print(se.intersection(se1))
{3, 4}
{3, 4}

2.反交集(^或symmetric_difference,取非公共部分)

print(se^se1)
print(se.symmetric_difference(se1))
{1, 2, 5, 6}
{1, 2, 5, 6}

3.並集(|或union,獲取兩集合全部內容,自動去重)

print(se|se1)
print(se.union(se1))
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}

4.差集(-或difference,取set1或set2除去set1與set2的公共部分)

print(se-se1)
print(se.difference(se1))
print(se1-se)
print(se1.difference(se))
{1, 2}
{5, 6}

5.子集(<或issubset,set1<set2,set1為set2的子集)

se2={1,2}
se3={1,2,3}
print(se2<se3)
print(se2.issubset(se3))

True
6.超集(>或issuperset,set2>set1,set2為set1的超集)

print(se3>se2)
print(se3.issuperset(se2)