還記得sorted()
嗎?我們今天來更完整呈現sorted(iterable,key,reverse)
的樣貌
其實在這個函數裡面所說的:只要是一個可迭代(iterable)的對象,例如:list,range等等,就可以進行排序,所以重點是要讓想要操作排序的對象可以迭代,或者操作對象的index進行排序。因此在過去幾天我們已經至少完整介紹比較進階的排序。
然而今天我們要來介紹dict的排序,並且完成昨天的作業。
.keys()
,若去看他的型態就知道在python中屬於class(<class 'dict_keys'>
),因此如果直接print(dict.keys())
會輸出的是dict_keys([...])
,而這樣的型態在python裡面是屬於iterable,因此可以直接進行排序,但不要忘了!sorted(dict.keys())
只能依照key值的大小進行排序k={'Apple':400,'Joey':600,'Bella':50,'2th King':10000}
print(sorted(k.keys()))
#output:['2th King', 'Apple', 'Bella', 'Joey']
.items()
先將資料型態轉成可迭代的對象後,在這裡可迭代的對象會轉成元組(tuple),資料會以小括號(var_1,var_2,....)
儲存,其index的編號方式和list希同,但tuple可看成一個不可修改的list,因此許多在list中有關修改的指令街不可以使用。接著再利用我們之前所學的lambda
來幫忙排序,有關詳細進階的排序的說明在此。這個方法所得到的結果當然會是一個以tuple排序後存在list。k={'Apple':400,'Joey':600,'Bella':50,'2th King':10000}
print(sorted(k.items(), key=lambda x:x[1]))
#output:[('Bella', 50), ('Apple', 400), ('Joey', 600), ('2th King', 10000)]
這是我們昨天的測資data,那該怎麼做呢?
dict.setdefault(key,value)
。dict.setdefault(key,value)
類似於get()方法,如果key不存在dict中,則會新增key,並賦予一個value。以下我們提供一個範例
dict={1: 4, '1': [5,7,3]}
dict.setdefault('1', []).append(112)
print(dict)
#output:{1: 4, '1': [5, 7, 3, 112]}
dict.setdefault('a', []).append(902)
print(dict)
#output:{1: 4, '1': [5, 7, 3, 112], 'a': [902]}
這裡將提供兩個方法
lambda
指定特定值給key後進行排序,會後利用key的排序結果來輸出我們需要的答案。這個方法不同於前面直接針對key排序!詳細觀念請看進階的排序
.items()
,先將資料型態轉為tuple,再進行排序f=open('data.txt','r')
collection={}
for line in f.readlines():
L=line.replace('\n','').split(',')
#print(L)
if (L[0] in collection):
collection[L[0]]=collection[L[0]]+round(float(L[1]),1)
else:
collection.setdefault(L[0],round(float(L[1]),1))
f.close()
#sorting by index
ke=list(collection.keys())
rank_sort_key=sorted(ke,key= lambda ke:collection[ke],reverse=True)
print('sorting by index')
for i in rank_sort_key:
print('{},{:3.1f}'.format(i,collection[i]))
#sorting whole collection
rank_1=sorted(collection.items(), key =lambda x : x[1],reverse=True)
print('sorting whole collection')
for i in range(len(rank_1)):
print('{},{:3.1f}'.format(rank_1[i][0],rank_1[i][1]))
Answer:
g,43.3
x,40.8
e,30.3
d,30.1
y,25.4
a,24.8
t,23.5
o,23.5
k,22.0
q,22.0
j,21.8
n,20.8
s,20.8
i,19.9
b,18.3
r,17.6
v,16.9
h,15.9
m,15.3
w,14.6
l,10.9
f,9.5
z,8.2
u,7.1
c,3.7
p,2.6
從這個題目可以發現,程式是需要看到你遇到什麼樣的題目進行設計,沒有一定的方法對或錯,只要能解出來的就是好方法!也可以發現到題目會遇到的東西也會愈來愈廣,能把所有東西綜合性使用在programming才是真的能融會貫通!
剩不到幾天!加油!