標籤:python 列表
列表可以嵌套不同的資料類型,如下是在列表中嵌套字典
a = [{"name":‘zhouziqi‘,‘contact‘:17806762943},{"name":‘zhouyu‘,‘contact‘:13246910612}]for i in a: print(i)
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/06/BD/wKiom1m9MTfhOhXeAAARW93kFck588.png" title="_20170916210710.png" alt="wKiom1m9MTfhOhXeAAARW93kFck588.png" />
我們可以用for迴圈去顯示每個字典
如果想找一個名字為zhouziqi的資訊,思路是這樣的,讓a列表中的每個字典一個個的賦值給i,這樣i就是字典,如果想要找到字典中的‘name‘就可以用i[‘name‘]
a = [{"name":‘zhouziqi‘,‘contact‘:17806762943},{"name":‘zhouyu‘,‘contact‘:13246910612}]for i in a: print(i[‘name‘])
這個在以後會經常用到哦
下面我們說一個for迴圈要注意的小點,直接看例子:
a = [{"name":‘zhouziqi‘,‘contact‘:17806762943},{"name":‘zhouyu‘,‘contact‘:13246910612}]name = input("Please input name:")for i in a: #把a列表中的字典一個個的賦予給變數i if name == i[‘name‘]: #判斷使用者輸入name的值是否等於在i字典中key為name的值 print("the name is exist") #如果存在就輸出正確資訊 else: print("None") #這是不正確的資訊
從上面代碼中看不出任何的毛病,你可以執行一下:
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M02/06/BD/wKiom1m9NJPRKBCqAAAMSbizaQc023.png" title="_20170916210710.png" alt="wKiom1m9NJPRKBCqAAAMSbizaQc023.png" />
為什麼明明我們輸入了zhouziqi這個名字是存在的,卻又說這個name存在,又說這個名字不存在呢?
因為我們的a列表裡面有兩個字典對吧,當我們執行上面代碼的第二行的時候,也就是讓使用者輸入一個值,我們輸入zhouziqi,這時候name就等於zhouziqi,進入第三行代碼,i的第一個值就是字典{"name":‘zhouziqi‘,‘contact‘:17806762943},然後進行第四行代碼,判斷name的值是否等於{"name":‘zhouziqi‘,‘contact‘:17806762943}字典中key為name的值,結果zhouziqi是等於zhouziqi的,這時候等式成立了,第五行代碼,列印正確資訊,這就出現了the name is exist,那為什麼還有個None的錯誤資訊列印出來呢,因為a裡面是兩個字典,剛剛我們{"name":‘zhouziqi‘,‘contact‘:17806762943},現在就用第二個字典{"name":‘zhouyu‘,‘contact‘:13246910612},發現不成立就列印出錯誤資訊。這和我們想的不一樣呀,那麼我們能不能讓它判斷有這個名字了就自己break出來呢。這樣還是有問題的哦,你看看以下代碼
a = [{"name":‘zhouziqi‘,‘contact‘:17806762943},{"name":‘zhouyu‘,‘contact‘:13246910612}]name = input("Please input name:")for i in a: if name == i[‘name‘]: print("the name is exist") break else: print("None")
我們執行一下,這樣輸入zhouyu
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M00/06/BE/wKiom1m9N3aCXZE2AAAPWz0I7_4028.png" title="_20170916210710.png" alt="wKiom1m9N3aCXZE2AAAPWz0I7_4028.png" />
為什麼會出現None,因為和上面的一樣,i的第一個值是{"name":‘zhouziqi‘,‘contact‘:17806762943}判斷出name(也就是zhouyu)不等於i[‘name‘](也就是zhouziqi)所以就列印出None,然後第二個字典是{"name":‘zhouyu‘,‘contact‘:13246910612},這才匹配成功輸出the name is exist。那我們應該怎麼辦呢?
因為不管怎麼樣,都會出現None,那麼我們能不能不要這個else呢,答案是確定的,可以不要這個else,然後在外面定義一個值為false_number預設值為0,然後在for迴圈裡面,如果我們找到使用者輸入的name就更改false_number的值為1,然後用break跳出迴圈,在外面我們再去判斷false_number是否為1,如果是說明這個name就存在於數組中的字典中,否則就不存在
a = [{"name":‘zhouziqi‘,‘contact‘:17806762943},{"name":‘zhouyu‘,‘contact‘:13246910612}]name = input("Please input name:")false_number = 0for i in a: if name == i[‘name‘]: false_number = 1 if false_number == 1: breakif false_number == 1: print("the name is exist")else: print("None")
本文出自 “愛周瑜” 部落格,請務必保留此出處http://izhouyu.blog.51cto.com/10318932/1965950
python列表及for迴圈要注意的知識點