(一) 簡單說明數據結構
字典是Python的內置數據結構,將數據與鍵關聯(例如:姓名:張三,姓名是鍵,張三就是數據)。例如:下面這個就是一個字典app
{'姓名': '張三', '出生日期': '2899-08-12', '成績': ['3.21', '3.10', '3.01']}編輯器
建立字典、添加數據、訪問字典數據的方式以下:函數
d = {} #直接用{}建立字典
f = dict() #經過工廠函數dict()建立字典
#經過下面的方式添加數據
d['姓名'] = '張三'
d['出生日期'] = '2899-08-12'
d['成績'] = ['3.21', '3.10', '3.01', '2.45', '2.34', '2.22', '2.01']
print(d)
#經過鍵訪問字典的數據
print(d['姓名'])
print(d['出生日期'])
print(d['成績'])
print(d['成績'][2])學習
輸出以下所示:測試
(二) 將列表轉換爲字典code
(1) 建立一個文件對象
james2.txt 第一項是姓名,第二項是出生日期,後面的是成績排序
James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16繼承
(2) 要求
在屏幕上輸出下面格式的字典
{'姓名': 'James Lee', '出生日期': '2002-3-14', '成績': ['3.21', '3.10', '3.01']}
(3) 主程序代碼
from FirstPython import the_dict as td
the_james2 = td.chdict('F:\Python\Python文件\james2.txt')
print(the_james2)
(4) the_dict模塊代碼
def sanitize(time_str):
#傳入字符串,將'-'和':'修改成'.'並返回,不然直接返回
if '-' in time_str:
(x,y) = time_str.split('-',1)
return(x+"."+y)
elif ':' in time_str:
(x,y) = time_str.split(':',1)
return (x + "." + y)
else:
return(time_str)
def chdict(the_file):
#傳入文件,返回一個字典
d = dict()
with open(the_file) as james_file:
the_list = james_file.readline().strip().split(',')
#分割數據,返回一個列表
d['姓名'] = the_list.pop(0)
#pop()刪除指定位置的數據項並返回
d['出生日期'] = the_list.pop(0)
d['成績'] = sorted(set([sanitize(t) for t in the_list ]),reverse=True)[0:3]
#set()刪除重複數據並返回一個無序的集合,sorted()排序
return d
(三) 類、屬性、對象實例
簡單的說,類和屬性都是一個抽象的概念,對象實例是一個具體的「存在」。例如:
類:人
屬性:姓名、身高、體重
對象實例:張3、李四
人 指一類東西,身高、姓名、體重 是這類東西都有的屬性,張3、李四指的是具體的某一我的。
(四) 建立類、建立對象實例
class People:
def __init__(self):
說明:上面這部分是必須有的,其中 People是類名,本身自定義,__init__(self)方法控制如何初始化對象,self也是必須有的(這是一個目標標識符,標識當前對象具體是什麼)
舉個例子:
(1) 建立一個類
class People:
def __init__(self,name,date=None,achievement=[]):
# date,achievement有缺省(默認)值
self.name = name
self.date = date
self.achievement = achievement
(2) 建立對象實例
zs = People('張三')
#建立 name爲張三的對象實例
說明:使用zs = People('張三')時,會自動調用people類的 __init__()方法,其中self = zs,name=’張三’,而後建立一個 name = ‘張三’date=None,achievement=[] 的對象實例zs
(3) 類中能夠定義不少方法,不過每一個方法的第一個參數都必須是self(沒有設置這個參數,那麼第一參數就會被當作self參數處理)。
例如:
def chdict(self,the_file):
with open(the_file) as new_file:
the_list = new_file.readline().strip().split(',')
return People(the_list.pop(0),the_list.pop(0),the_list)
def top3(self):
return(sorted(set(self.sanitize(t) for t in self.achievement),reverse=True)[0:3])
(五) 繼承
能夠從零開始建立一個新類,也能夠繼承已經建立好的類,在這個基礎上新增屬性、方法。
繼承的概念:繼承父類的全部方法及屬性,子類能夠新增方法、屬性,也能夠重寫父類的方法。簡單的說,好比你繼承了你父親的全部能力及天賦(包括身高、體重等),而後你能夠經過學習去掌握更多的能力,繼承自你父親的能力你也能夠根據本身的須要去改變(好比:傑出的溝通能力,你父親可能用在商業談判上,你可能想用在泡妞上面)。比喻可能不太形象,請多多包涵。
(1) 經過繼承的方式建立一個類
class PeopleList(list):
def __init__(self):
list.__init__([])
PeopleList(list)新類將派生list類,list.__init__([]) 初始化所派生的類
(2) 舉個例子,下面這個類就能繼承list的全部方法
class PeopleList(list):
def __init__(self,name,date=None,achievement=[]):
list.__init__([])
self.name = name
self.date = date
self.extend(achievement)
能夠在編輯器中進行測試:
james = PeopleList('james') james.append(5) print(james) james.extend([1,2,3]) print(james)