列表可以嵌套不同的数据类型,如下是在列表中嵌套字典

1
2
3
=  [{ "name" : 'zhouziqi' , 'contact' : 17806762943 },{ "name" : 'zhouyu' , 'contact' : 13246910612 }]
for  in  a:
     print (i)

wKiom1m9MTfhOhXeAAARW93kFck588.png

我们可以用for循环去显示每个字典 

如果想找一个名字为zhouziqi的信息,思路是这样的,让a列表中的每个字典一个个的赋值给i,这样i就是字典,如果想要找到字典中的'name'就可以用i['name']

1
2
3
=  [{ "name" : 'zhouziqi' , 'contact' : 17806762943 },{ "name" : 'zhouyu' , 'contact' : 13246910612 }]
for  in  a:
     print (i[ 'name' ])

这个在以后会经常用到哦

下面我们说一个for循环要注意的小点,直接看例子:

1
2
3
4
5
6
7
=  [{ "name" : 'zhouziqi' , 'contact' : 17806762943 },{ "name" : 'zhouyu' , 'contact' : 13246910612 }]
name  =  input ( "Please input name:" )
for  in  a:  #把a列表中的字典一个个的赋予给变量i
     if  name  = =  i[ 'name' ]:  #判断用户输入name的值是否等于在i字典中key为name的值
         print ( "the name is exist" #如果存在就输出正确信息
     else :
         print ( "None" #这是不正确的信息

从上面代码中看不出任何的毛病,你可以执行一下:

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出来呢。这样还是有问题的哦,你看看以下代码

1
2
3
4
5
6
7
8
=  [{ "name" : 'zhouziqi' , 'contact' : 17806762943 },{ "name" : 'zhouyu' , 'contact' : 13246910612 }]
name  =  input ( "Please input name:" )
for  in  a:
     if  name  = =  i[ 'name' ]:
         print ( "the name is exist" )
         break
     else :
         print ( "None" )

我们执行一下,这样输入zhouyu

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就存在于数组中的字典中,否则就不存在

1
2
3
4
5
6
7
8
9
10
11
12
13
=  [{ "name" : 'zhouziqi' , 'contact' : 17806762943 },{ "name" : 'zhouyu' , 'contact' : 13246910612 }]
name  =  input ( "Please input name:" )
false_number  =  0
for  in  a:
     if  name  = =  i[ 'name' ]:
 
         false_number  =  1
     if  false_number  = =  1 :
         break
if  false_number  = =  1 :
     print ( "the name is exist" )
else :
     print ( "None" )