3. List and dictionary
List的學習項目包含List的定義、存(附加新的元素、更新內容)、取(讀取)
L01. List Introduction
List(你可以中譯為串列,上課中會說List)。顧名思義,「a list of something」,通常代表的是「something arranged in order」。也就是把一群物件、東西、數值、變數照順序排好。List就是這樣的結構。只要放進List中,他就會被給予一個整數編號,而整數編號從0開始編起。在下列程式=
(assignment)右側為List([]
是一個空的List),當其被assign給左側時,左側的變項就是List型態。
alist = []
alist = [3, 4, 5]
List中的內容不一定要同型態,List中也可以有List,也可以同時有float(浮點數)、int(整數)或str(字串)等多種變數型態的數值。但多半在實際寫程式時,會盡量讓list中內容的變數型態維持一致。
L02. Access List
L02.1 by index
以alist = [3, 4, 5]
而言,3就放置在alist
的0的位置,可用alist[0]
存取;4就放置在alist
的1的位置,可用alist[1]
存取。當要存取一個list中某一個內容時,就把數值或其他變數Assign給相對應的位置。例如alist[3] = 4
L02.2 Slicing
有時候我們不只要取出一個元素,而是要取出list中第n個到第m個元素,這樣的動作可稱為Slicing。下面程式碼可取出list中最後一個元素,或者取其中數個元素。以alist[1:3]
為例,其取index從1開始到3之前。所以是1與2。而alist[-3:-1]則是取-3開始到-1之前。
L03. Update list content
用assignment就可以更動List的值,如alist[3] = 4
。但我們更經常隨著for-loop要在List後面新增元素。或者把兩個List給合併起來,前者稱為append()
,後者稱為extend()
。
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 3, 4, 3, 4, 5, [3, 4, 5]]
Using + to concatinate two lists
[1, 2, 3, 4, 5, 6]
L04. Hierarchical List
L04.1 Access two-layer list
D01. Dictionary introduction
Dictionary(你可以中譯為「字典」,但上課會直接稱之為dict)如同其字面上的意思,是給人就單字查詢意義的。在python中也不例外,他所存放的是「key to value pairs」。所以實際上他的內容並沒有順序,所以他不像list是用index 0, 1, 2...來存取。他是用key來存取value。在下面的例子中adict[1]
所對應的值就是3
,2
所對應的值就是4
。
雖然說是key和value,但其中的value也可以是list,或者是另一個dictionary。而一個list中,也可以擺放很多個dictionary,簡單地說,就是list中可以有dictionary或list,dictionary可對應到list或dictionary。唯獨要注意的是,list或dictionary,不可以當作dictionary的key,這是為了怕寫程式的人亂改list或dictionary作為key的值,導致對應錯誤。但tuple可以作為dictionary的key。
D01. Initialize dict
{} {}
D02. Access dictionary
Output
D03. Update a dictionary
就是用跟list很接近的語法把他加進去而已。list會用這種方式來覆蓋或取出list裡面的值,例如alist[3] = 5
。而dict也可以這麼做adict[3] = 5
。你可以想像說list是指定index為3的項目要被取代,dict則是指定key為3的項目要被取代。但要記得,如果list要新增一個值,要用append()
的方式如alist.append(3)
,且index會自動加上去,而dict要新增一個key-to-value pair,則直接寫adict[key] = value
即可。
在底下的程式碼中,我新增一個adict
後即刻新增一個key為3的key-to-value pair,然後我用一個for-loop新增了10個key-to-value的pair。注意key若被重複assign,就會被更新,如下。
Case study: Accessing youbike data
獲取youbike資料
用
requests
套件的.get()
獲取該url的回應。將該http request response的文字抽取出來
response.text
,資料型態為str
將抽取出來的文字,我知道他是用json格式存,因此用
json.loads()
將其轉換為python的資料型態,也就是由層層list與dictionary所套疊起來的資料最後一一存取其內容
測試出一筆資料的結構
如果偵測出他是一個list,那就取出第0筆資料往下追蹤。
如果偵測出他是一個dict,就用
dict.keys()
將其所有的key給列印出來,然後挑你所需要的key往下追蹤。
Output
取出所有的keys與Values
使用.keys()
與.values()
與.items()
分別取出dict的內容,並觀察結果。
Output
逐行列印Youbike的內容
Iterating a dictionary: 下列方法都可以把所有站台的sbi給列印出來,請觀察看看.items()
和沒有.items()
的用法有何差異。
計算每個行政區有多少個youbike站台
Last updated