iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
AI & Data

看對話學 Python 資料分析,用情境故事帶你入門系列 第 14

Day-14 日式咖哩店的資訊對話,活用字典 dictionary 儲存資料(下)

  • 分享至 

  • xImage
  •  


Meiko 和 Jason 快要把他們的咖哩吃完囉,來看看今天他們討論些什麼?Licensed by Adobe Stock

dictionary 與串列 list 的結合

Meiko:「對了,Jason,你這次教了我dictionary,我觀察餐廳的服務生,看起來不會用一個一個的dictionary 來整理菜單,他們會用什麼樣的方式來管理出菜啊?」

Jaosn:「我也這樣覺得,我覺得比較好的方式應該是放在串列list裡面。先前我們有用串列來放有順序的資料,因為串列內建的順序,可以方便我們抓取資料!」

Meiko:「歐,串列list除了直接存字串和數字之外,還可以把 dictionary 也放到裡面呀?」

Jason :「對啊,在 Python 裡面串列list和字典dictionary都是容器的型態(白話就是都是可以用來裝資料用的),所以串列也可以用來裝字典。」

Meiko:「聽起來就好像塑膠袋可以裝東西,背包也可以裝東西的感覺!」

Jason:「... 也可以這樣說拉,如果你想要把dictionary增加到 list裡面,我們可以用.append()這個方法來做。但在開始之前,你要先宣告一個空的串列,像我這邊是把orderList設定成list()。」

orderList=list()
orderList.append(order_1)
orderList.append(order_2)
print (orderList)

Jason:「接著再把order_1order_2.append()這個方法,把它們加到orderList裡面。」

Meiko:「看這樣的寫法好像蠻有意思的,可是這個輸出的結果實在不太適合人眼觀看耶!」

Jason:「說的也是,你記得我們之前也用for-loop把串列list裡面的內容印出來嗎?現在我們把 dictionary放到了串列list裡面,也提到dictionary也可以用for-loop去印出來,你有沒有想到該怎麼做,才把orderList裡面的所有資訊都印出來?」

Meiko:「對耶,我們先前就是用for-loop印出星期一到星期日,這些資訊是存放在串列list裡面。至於 dictionaryfor-loop印,你剛才才提過把我們吃的咖哩飯套餐的內容印出來。但,是要連用兩次 for-loop 的意思嗎?」

Jason:「其實蠻接近的,在程式裡面有一個專有名詞叫做 2 層巢狀for-loop,意思就是在迴圈裡面又再包覆另外一個迴圈。所以像這個例子,我們不是把dictionary放到list裡面嗎?所以外層迴圈就會是把list裡面的每一個元素印出來。像這樣...」

for i in range(len(orderList)):
	print (orderList[i])

Jason:「我先不跟你說 2 層巢狀迴圈,我們先看上面這部分的程式,你有看到熟悉的程式碼嗎?」

Meiko:「這跟之前要印出串列 list 是一樣的呀,有一個 index 叫做 i 在....誒,Jason 你怎麼不是寫這樣?」

for i in orderList:
	print (orderList[i])

Meiko:「誒,出現錯誤!怎麼會!『list indices must be integers or slices, not dict』是什麼意思?」

Jason :「它意思是說串列list裡的 index 需要是數字,不能是dictionary(dict 是 dictionary 的縮寫)!我們不是把dictionary裝到list裡面嗎?所以現在 orderList裡面的物件就不能直接用 i 這個 index 取用。」

Meiko:「歐,原來是這樣,早說麻...」

Jason:「我會用range()來界定範圍,然後用len()這個函數來計算orderList的長度,所以 range(len(orderList))就會是依照orderList的長度,當作是一個range()的範圍。」

for i in range(len(orderList)):
	print (orderList[i])

Meiko:「原來,這樣聽起來也蠻合理的,那再下一步?現在看起來print (orderList[i]),有分別把我們剛寫的order_1order_2dictionary印出來,可是還是不太好理解。」

Jason :「你記得我們有提過的.item()和 key、value 嗎?(日式咖哩店的資訊對話,活用字典 dictionary 儲存資料(中))我會這樣寫

for i in range(len(orderList)):
	localDic=orderList[i]
	for key,value in localDic.items():
		print (key,value)

Meiko:「我記得看到裡面那層,用 key、value 的方式,把localDic.items()的方式印出對應的 key 和 value 值。這樣看來 Jason,你先把orderList[i]指定到localDic對吧?

for i in range(len(orderList)):
	localDic=orderList[i]

Jason:「沒錯,我透過一次的指定,先把串列list的內容指定到一個叫做localDic的變數,接著,因為它是一個dictionary,所以我們就可以接著用先前學過的for-loop.items()把對應的 key 和 value 都印出來囉!」

Meiko:「歐這樣子我比較懂了,不過這兩個訂單都黏在一起,能否把他們分開,比較容易觀看?」

Jason:「的確,如果我們加一些字串說明的話,可能會有些幫助!像這樣...」

for i in range(len(orderList)):
 localDic=orderList[i]
 print ('第 %s 筆訂單 ======'%(localDic['orderId']))
 for key,value in localDic.items():
   print (key,value)

Meiko:「看起來清楚多了,至少每筆訂單又區分開來,話說 Jason,我們飯也吃完,酒也喝完了,好像可以去下個地方續攤啦!」

Jason :「對啊,吃的真飽,這家店的餐點份量真大,難怪外面還是很多客人大排長龍,我們就不在這佔位置囉,Let’s go!」

牛刀小試

我大寶寶~拉,今天介紹的巢狀for-loopdictionary的用法,都是大寶寶在工作上會運用到的技巧唷,就像今天 Meiko 和 Jason 聊天的時候提到,很多資料都是用dictionary的格式存下來,但資料又不可能只有單一存在。所以這邊透過for-loop就可以一次處理很多資料!之後,還會搭配 Numpy 或 Pandas 套件,畢竟有前人的努力,我們後輩只要站在巨人的肩膀上寫程式就能更有效率囉!

給大寶寶留言、分享、鼓勵

歡迎登入留言跟我分享你的想法唷!(登入不麻煩,點一下 FB 登入就可以留言了!)

1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.如果前面的內容忘記了,趕快看一下大寶寶這一系列的看對話學 Python 資料分析,用情境故事帶你入門的列表!就能夠繼續 Happy Coding 囉!


上一篇
Day-13 日式咖哩店的資訊對話,活用字典 dictionary 儲存資料(中)
下一篇
Day-15 函式 function,就好像建造積木一樣(上)
系列文
看對話學 Python 資料分析,用情境故事帶你入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言