字典的定義:python
字典的形式是以key:values。{key1,values,key2,values}緩存
特性:app
一、能夠存放多個值ide
二、字典是無需的ui
三、字典的key是惟一,有去重功能google
key的定義規則:編碼
一、不可變的(數字,字符串,元組) 查看變量的內存爲位置id
二、字典是惟一的
三、
hash斷定是否可變
values定義:spa
任意類型
建立一個字典:指針
方法1code
dict_1 = {'name':'zhangsan', 'age':22}
方法2:
# 方法2 dict4 = dict(name='zhangsan',age=22) print(dict4)
方法3
# 方法3 dict5 = dict((('name','zhangsan'),('age',22))) print(dict5)
方法4:
# 方法4 dict6 = dict({'name':'zhangsan','age':22}) print(dict6)
字典的增:
若是字典中沒有對應的key,則增長,若是有對應的key,則覆蓋
# 增 dict_1 = {'name':'zhangsan', 'age':22} print(dict_1) dict_1['Sex'] = 'male' print(dict_1)
字典的刪
# 刪除 dict_1 = {'name':'zhangsan', 'age':22} # 刪除方法1 del dict_1['name'] print(dict_1) 結果: {'age': 22} # 刪除方法2: dict_1.pop('name') print(dict_1) 結果: {'age': 22} # 刪除方法3 dict_1.popitem() # 屬於隨機刪除 print(dict_1) 結果: {'age': 22}
字典的改
# 改 dict_1 = {'name':'zhangsan', 'age':22} dict_1['name'] = 'lisi' print(dict_1) 結果: {'age': 22, 'name': 'lisi'}
字典的查
# 查 dict_1 = {'name':'zhangsan', 'age':22} print(dict_1) print(dict_1['name']) #此種方法,若是key不存在,將會報錯,而get方法不存在不會報錯 print(dict_1.get('name')) 結果: {'age': 22, 'name': 'zhangsan'} zhangsan zhangsan
字典的遍歷
dict_1 = {'name':'zhangsan', 'age':22} # 方法1 for k in dict_1: print(k,dict_1[k]) # 方法2 for k, v in dict_1.items(): print(k, v)
字典的其餘方法
# keys方法 dict_1 = {'name':'zhangsan', 'age':22} print(dict_1.keys()) # 遍歷keys方法 for i in dict_1.keys(): print(i) # vaules方法 print(dict_1.values()) for i in dict_1.values(): print(i) # uptate方法 dict2 = {'key':1, 'key2':2} dict_1.update(dict2) print(dict_1) # item方法 dict_1.items() print(dict_1) # formkeys方法,快速生成一個字典 dict3 = dict.fromkeys([1, 2, 3], 'keys') print(dict3) # setdefault方法 # 若是鍵在字典中,返回這個鍵所對應的值。若是鍵不在字典中,向字典 中插入這個鍵,而且以default爲這個鍵的值,並返回 default。default的默認值爲None dict_1.setdefault("sex", "male") print(dict_1)
三級菜單(精簡版)的實現
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '網易': {}, 'google': {} }, '中關村': { '愛奇藝': {}, '汽車之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龍觀': {}, }, '朝陽': {}, '東城': {}, }, '上海': { '閔行': { "人民廣場": { '炸雞店': {} } }, '閘北': { '火車戰': { '攜程': {} } }, '浦東': {}, }, '山東': {}, } run_level = menu last_level = [] while True: for key in run_level: print(key) chose = input(">>").strip() if len(chose) == 0: continue elif chose == 'b': if len(chose) == 0: break run_level = last_level[-1] last_level.pop() elif chose == 'q': break elif chose not in run_level: continue last_level.append(run_level) run_level = run_level[chose]
淺拷貝,只是拷貝到最第一層
dic1 = {'name': 'alex', 'age': '22', 'alex':['name','zhangsan','lisi']} dic2 = dic1.copy() print(dic1) print(dic2) dic2['alex'][0] = 'wangwu' print(dic1) print(dic2) 結果: {'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi'], 'age': '22'} {'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi'], 'age': '22'} {'name': 'alex', 'alex': ['wangwu', 'zhangsan', 'lisi'], 'age': '22'} {'name': 'alex', 'alex': ['wangwu', 'zhangsan', 'lisi'], 'age': '22'}
深拷貝
# 深拷貝須要用到copy模塊,
import copy dic1 = {'name': 'alex', 'age': '22', 'alex':['name','zhangsan','lisi']} dic2 = copy.deepcopy(dic1) print(dic1) print(dic2) dic1['alex'][0] = 'wangwu' print(dic1) print(dic2) 結果: {'age': '22', 'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi']} {'age': '22', 'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi']} {'age': '22', 'name': 'alex', 'alex': ['wangwu', 'zhangsan', 'lisi']} {'age': '22', 'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi']}
定義:由不一樣元素組成的集合,集合中是一組無序列的可hash值,能夠做爲字典的key
特性:
集合的目的是將不一樣的值存放到一塊兒,不一樣的集合間用來作關係運算,無需糾結於集合中單個值
集合的建立
set = {1, 2, 3, 4, 5} print(set) print(type(set)) 結果: {1, 2, 3, 4, 5} <class 'set'>
集合的經常使用方法:
set = {1, 2, 3, 4, 5} print(set) print(type(set)) 結果: {1, 2, 3, 4, 5} <class 'set'> set1 = {1, 2, 3, 4, 5} set2 = {2, 3} # 交集 print(set1 & set2) # 結果: {2, 3}
# 並集 print(set1 | set2) # 結果: {1, 2, 3, 4, 5}
# 差級 print(set1 - set2) # 結果: {1, 4, 5}
# 父級 print(set1 >= set2) # 結果: True
# 子集 print(set2 <= set1) # 結果: True
# 對稱差級 print(set1 ^ set2) # 結果: {1, 4, 5}
# 刪除 set1.pop() #隨機刪除 print(set1) # 結果: {2, 3, 4, 5} set1.remove(5) print(set1) # 結果: {2, 3, 4} set1.discard(6) print(set1) # pop()方法隨機刪除 # remove()參數,若是刪除的值不存在,報錯,必須指定一個參數 # discard(),若是刪除的值不存在,不會報錯,刪除事沒有返回值 # 斷定集合中是否有指定的值 if 'a' in set1: print("存在") else: print("不存在") #結果: 不存在
# 增長
set1.add("hello") print(set1) # 結果: {2, 3, 4, 'hello'} set1.update('abc') print(set1) # 結果: {2, 3, 4, 'hello', 'c', 'b', 'a'}
符號 | 意義 | 對應的集合方法 |
& | 交集 | intersection() |
- | 差級 | difference() |
| | 並集 | union() |
>=,<= | 父級,子集 | issubset() issuperset() |
in | 在 | |
not in | 不在 | |
^ | 對稱差級 | symmetric_difference() |
對文件的操做流程
一、打開文件,獲得文件句柄並賦值給一個變量
二、經過文件句柄對文件進行操做
三、關閉文件
現有文件以下:
Somehow, it seems the love I knew was always the most destructive kind 不知爲什麼,我經歷的愛情老是最具毀滅性的的那種 Yesterday when I was young 昨日當我年少輕狂 The taste of life was sweet 生命的滋味是甜的 As rain upon my tongue 就如舌尖上的雨露 I teased at life as if it were a foolish game 我戲弄生命 視其爲愚蠢的遊戲 The way the evening breeze 就如夜晚的微風 May tease the candle flame 逗弄蠟燭的火苗 The thousand dreams I dreamed 我曾千萬次夢見 The splendid things I planned 那些我計劃的絢麗藍圖 I always built to last on weak and shifting sand 但我老是將之建築在易逝的流沙上 I lived by night and shunned the naked light of day 我夜夜笙歌 逃避白晝赤裸的陽光 And only now I see how the time ran away 事到現在我纔看清歲月是如何匆匆流逝 Yesterday when I was young 昨日當我年少輕狂 So many lovely songs were waiting to be sung 有那麼多甜美的曲兒等我歌唱 So many wild pleasures lay in store for me 有那麼多肆意的快樂等我享受 And so much pain my eyes refused to see 還有那麼多痛苦 個人雙眼卻視而不見 I ran so fast that time and youth at last ran out 我飛快地奔走 最終時光與青春消逝殆盡 I never stopped to think what life was all about 我從未停下腳步去思考生命的意義 And every conversation that I can now recall 現在回想起的全部對話 Concerned itself with me and nothing else at all 除了和我相關的 什麼都記不得了 The game of love I played with arrogance and pride 我用自負和傲慢玩着愛情的遊戲 And every flame I lit too quickly, quickly died 全部我點燃的火焰都熄滅得太快 The friends I made all somehow seemed to slip away 全部我交的朋友彷佛都不知不覺地離開了 And only now I'm left alone to end the play, yeah 只剩我一我的在臺上來結束這場鬧劇 Oh, yesterday when I was young 噢 昨日當我年少輕狂 So many, many songs were waiting to be sung 有那麼那麼多甜美的曲兒等我歌唱 So many wild pleasures lay in store for me 有那麼多肆意的快樂等我享受 And so much pain my eyes refused to see 還有那麼多痛苦 個人雙眼卻視而不見 There are so many songs in me that won't be sung 我有太多歌曲永遠不會被唱起 I feel the bitter taste of tears upon my tongue 我嚐到了舌尖淚水的苦澀滋味 The time has come for me to pay for yesterday 終於到了付出代價的時間 爲了昨日 When I was young 當我年少輕狂
文件的基本操做
# open帶個文件的方法,encoding指定打開文件的方法 f = open('test1', 'r', encoding='utf-8') # readline方法,按行讀取 first_line = f.readline() print(first_line) # 關閉文件 f.close()
打開文件的方法
模式 | 含義 |
r | 只讀模式打開,默認 |
w | 只寫模式,不能夠讀,不存在,則建立,存在則刪除內容 |
a | 追加模式,可讀,不存在建立,存在則在後面追加內容 |
r+ | 讀寫模式,可讀,可寫,可追加 |
w+ | 寫讀模式 |
a+ | 同a同樣 |
b | 以二進制形式打開文件,可與r、w、a結合使用 |
U | 支持全部的換行符,將\r \n自動轉換成\n , \r\n都表示換行 |
文件的基本操做
# 文件讀取前5行 f = open('test1', 'r', encoding='utf-8') count = 0 for line in f: if count < 5: print(f.readline()) count += 1 # readlines方法,一次讀取全部的文件,並按行轉換爲列表形式 f = open('test1', 'r', encoding='utf-8') line = f.readlines() print(line) f.closed # closed方法,斷定文件是否關閉,關閉結果爲真,反之爲假 f = open('test1', 'r', encoding='utf-8') line = f.readlines() print(line) print(f.closed) # read方法,一次讀取整個文件,可是文件過大,並不能一次讀取完不 f = open('test1', 'r', encoding='utf-8') line = f.read() print(line) f.close() # f = open('test', 'w', encoding='utf-8') f.write('aaa') f.flush() # name方法,顯示文件名 print(f.name) 結果: test # tell()方法,顯示文件指針的位置,即文件讀取到哪裏的位置 f = open('test1', 'r+', encoding='utf-8') line = f.readline() print(line) print(f.tell()) # truncate([size]) 保留文件從開始到指定的字符數,其餘的都刪除 f = open('test1', 'r+', encoding='utf-8') f.truncate(20) # readable,斷定文件是否可讀 print(f.readable()) # writable,斷定文件是否可寫 print(f.writable()
文件的經常使用方法:
屬性和方法 | 描述 |
closed | 判斷文件是否關閉,若是文件關閉,返回Ture |
encoding | 顯示文件的編碼類型 |
mode | 顯示文件的打開模式 |
name | 顯示文件的名稱 |
newlines | 文件使用的換行模式 |
flush() | 把緩存區的內容寫入的磁盤,及強制刷新到磁盤 |
close() | 關閉文件 |
read([size]) | 從文件中讀取size個文件內容,最爲字符串返回 |
readline([size]) | 從文件中讀取一行,做爲 字符串返回。若是執行size,表示每行每次讀取的字節數,依然好讀完整行的內容 |
readlines([size]) | 把文件中的每行存取到列表中返回,若是指定size,表示每行每次讀取的字節數 |
seek(offset[, whence]) | 把文件指針移動到一個新的位置,offset表示至關於whence的位置。whenece用於設置相對位置的起點,0表示從文件的開頭開始計算,1表示從當前位置開始計算,2表示從文件末尾開始計算,若是whenece省略,offset表示相對文件開頭的位置 |
tell | 返回文件指針當前的位置 |
truncate([size]) | 刪除size個字節後的內容 |
write(str) | 把字符串str寫入到文件 |
writeline() | 把字符串序列寫入到文件 |
修改文件內容:
test1文件內容
Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
代碼:
with open('test2', 'w', encoding='utf-8') as f1: with open('test1', 'r', encoding='utf-8') as f: for line in f: if '舌尖上的雨露' in line: line = line.replace('舌尖上的雨露','舌頭上的美味') f1.write(line)
test2文件內容
Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌頭上的美味