3 《數據串:字典{}、列表[]》
(1)添加or修改 -- [list元素] \ [dict: 值]
1 ## 1. 添加or修改列表元素\字典值 都通過賦值語句
2 list1 = ['小明','小紅','小剛','小美'] 3 list1[1] = '小藍'
4 print(list1) 5
6 dict1 = {'小明':'男'} 7 dict1['小明'] = '女'
8 print(dict1)
(2)相互嵌套
1 ## 2. 相互嵌套
2 students=[['小明','小紅','小剛','小美'],['小強','小蘭','小偉','小芳']] 3 print(students[1][3]) # 取出小芳
4
5 scores = { 6 '第一組':{'小明':95,'小紅':90,'小剛':100,'小美':85}, 7 '第二組':{'小強':99,'小蘭':89,'小偉':93,'小芳':88} 8 } 9 print(scores['第二組']['小芳']) # 取出小芳的成績
(3){字典}轉換成【list嵌套元組tuple】
1 ## 3.{字典}轉換成【list嵌套元組tuple】
2 x={'a':3,'b':1,'c':5,'d':2} 3 # AAA. 如果鍵不是數值,直接變成 列表嵌套元組。
4 # a=[('a',3), ('b',1), ('c',5), ('d',2)]
5 a=sorted(x.items()) 6
7 y={} # y={3:'a', 1:'b', 5:'c', 2: d'}
8 for key,val in x.items(): 9 y[val]=key # x的鍵值對調
10
11 # BBB. 如果鍵是數值,升序排列,變成 列表嵌套元組。
12 # b=[(1,'b'), (2,'d'), (3,'a'), (5,'c')]
13 b=sorted(y.items())
(4)【合並字典】【合並列表】
1 ## 4. 【合並字典】
2 a={'a':1,'b':2,'c':3} 3 b= {'aa':11,'bb':22,'cc':33} 4 d=dict(a,**b) # 相當於列表a.entend(b)
5 #{'a': 1, 'b': 2, 'c': 3, 'aa': 11, 'bb': 22, 'cc': 33}
6 print(d) 7 c = {} 8 c.update(a) # c={'a':1,'b':2,'c':3}
9 c.update(b) 10 # c={'a': 1, 'b': 2, 'c': 3, 'aa': 11, 'bb': 22, 'cc': 33}
11 print('\n') 12
13 ## 4. 【合並列表】
14 a = [91, 95, 97, 99] 15 b = [92, 93, 96, 98] 16 ## 下面的結果(除了append)得出的列表是一樣的!!
17 a+=b # [91, 95, 97, 99, 92, 93, 96, 98]
18 a=a+b # [91, 95, 97, 99, 92, 93, 96, 98]
19 a.extend(b) # [91, 95, 97, 99, 92, 93, 96, 98]
20 a.append(b) # [91, 95, 97, 99,[92, 93, 96, 98]]
21 # b=[]整體作為一個元素
22 a[0:0]=b #[92, 93, 96, 98, 91, 95, 97, 99]
23 # 使用切片??
(5)【直接遍歷-字典dict中的值】
1 # 5.【直接遍歷-字典dict中的值】
2 # (1) 大字典+小字典
3 scores = { 4 '第1組':{'小明':95,'小紅':90,'小剛':100,'小美':85}, 5 '第3組':{'小強':99,'小蘭':89,'小偉':93,'小芳':88} 6 } 7 for i,j in scores.items(): 8 print(i) # 鍵
9 print(j) # 值
10 for k in scores.values(): 11 print(k) 12
13 # (2) 大字典+小字典+列表
14 unit_rooms = {3:{301:[1,80],302:[1,80],303:[2,90],304:[2,90]}, 15 4:{401:[1,80],402:[1,80],403:[2,90],404:[2,90]}, 16 5:{501:[1,80],502:[1,80],503:[2,90],504:[2,90]} 17 } 18 for sub_dict in unit_rooms.values(): 19 for i,j in sub_dict.items(): 20 print('戶室:%d\n朝向:%d\n面積:%d'%(i,j[0],j[1]))
(6)【取出list里面全部int / str】
1 # 6.【取出list里面全部int】
2 a=[1,2,2,3,4] 3 sum0=''
4 k=0 5 for k in range(len(a)-1): 6 sum0=sum0+str(a[k])+',' # 1,2,2,3,4,(最后多余的逗號)
7 k=k+1
8 sum=sum0+str(a[-1]) # 1,2,2,3,4(沒有最后多余的逗號)
9 print(sum) 10
11
12
13 # 6.【取出list里面全部str】
14 list=['1','2','3','4','5'] 15 x=(',').join(list) # 1,2,3,4,5
16 print(x)
(7)【字符串分離.split() /合並.join()】
1 # 7.【字符串分離.split() /合並.join()】
2 list0=['你,我,他','1,2,3' ] 3 for i in list0: 4 a=i.split(',') # ['你','我','他'] ['1','2','3']
5 print(a) 6 b=','.join(a) # 你,我,他 1,2,3
7 print(b) 8
9 list1=['d','o','g'] 10 print(','.join(list1)) # d,o,g
11 print('-'.join(list1)) # d-o-g
(8)【列表數字str變int】+【自動升序/降序】
1 ## 8. 【列表數字str變int】+【自動升序/降序】
2 x0=['2', '4', '1', '3'] 3 x=list(map(int,x0)) # x=[2,4,1,3]
4 # 升序[1, 2, 3, 4]
5 x2=x.sort(reverse=False) 6 x2=sorted(x,reverse=False) 7 # 降序[4, 3, 2, 1]
8 x3=x.sort(reverse=True) 9 x3=sorted(x,reverse=True)
A. 合並+排序
1 ## 作1:合並+排序
2 c = ['91', '95', '97', '99'] 3 d = ['92', '93', '96', '98'] 4 ###c+=d # ['91', '95', '97', '99', '92', '93', '96', '98']
5 c.extend(d) # ['91', '95', '97', '99', '92', '93', '96', '98']
6 print(c) 7 x1=list(map(int,c)) # [91,95,97,99,92,93,96,98]
8 x1.sort() # 升序[91,92,93,95,96,97,98,99]
9 print(x1) 10 e = ['91', '95', '97', '99'] 11 f = ['92', '93', '96', '98'] 12 e+=f 13 print(e) 14 x2=list(map(int,e)) 15 x3=sorted(x2,reverse=True) # 降序[99, 98, 97, 96, 95, 93, 92, 91]
16 x4=sorted(x2,reverse=False) # 升序[91, 92, 93, 95, 96, 97, 98, 99]
17 print(x3) 18 print(x4) 19 print('\n')
B. 【算平均分】
1 ## 作業2:算平均分
2 scores = {'語文':89, '數學':95, '英語':80} 3 sum=0 4 def get_average(scores): 5 for subject, score in scores.items(): 6 global sum 7 print(subject) # 科目
8 print(score) # 分數
9 sum=sum+score 10 print(sum) 11 global ave_score 12 ave_score = sum/len(scores) 13 get_average(scores) 14 print('\n總分是%d'%sum) 15 print('平均分是%d'%ave_score) 16 ## 同時取鍵:值
17 for i,j in scores.items(): 18 print(i+':'+j)
C. 【哈利波特學院-成績】
1 ## 作業3:哈利波特學院-成績
2 # (1)讀取人名、各分數
3 a=open('sample/scores.txt','r') 4 b=a.readlines() 5 a.close() 6 print(b) 7
8 # (2)計算總分,存入Scores11
9 dict = {} # {'羅恩': 102, '哈利': 392}
10 mark=[] # [100,99,98,,,]
11 for i in b: 12 print(i) 13 j=i.split(' ') # 最后一行是'\n'
14 print(j) 15 name=j[0] 16 sum=0 17 ## A. 計算總分
18 for k in j[1:-1]: # 不包括最后一行'\n'
19 sum=sum+int(k) 20 mark.append(k) 21 dict[name]=sum 22 print(dict) 23 ## B. 提取字典中的鍵:值 寫入scores11
24 for n,m in dict.items(): 25 x=n+str(m)+'\n'
26 print('最終成績——'+x) 27 # 下面是打開文件的另一種方式,為避免忘記close(),很常見
28 with open('sample/scores11.txt','a') as a: 29 c=a.writelines(x) # <class string>
30 ## mark=[]是為了復習一遍 【列表自動排序】
31 print(mark) 32 mark=list(map(int,mark))### 字符串str變整數int
33 print(mark) 34 mark.sort(reverse=True) ### 降序
35 print(mark) 36 print('\n') 37 ## (3)scores11排序
38 dict1={} 39 num=[] 40 with open('sample/scores11.txt','r') as a: 41 d=a.readlines() 42 for i in d: 43 n=i[0:-4] # 1字符讀取姓名
44 m=int(i[-4:]) # 1字符讀取分數,不加int會出現'\n'
45 num.append(m) 46 dict1[m]=n 47 print(num) #[102, 392, 570, 275]
48 print(dict1) 49 num.sort(reverse=True) # 降序
50 print(num) #[570, 392, 275, 102]
51 with open('sample/scores12.txt','a') as a: 52 for i in num: 53 x=dict1[i]+str(i)+'\n'
54 e=a.writelines(x) 55 print(x)