列表可以嵌套不同的数据类型,如下是在列表中嵌套字典
a = [{"name":‘zhouziqi‘,‘contact‘:17806762943},{"name":‘zhouyu‘,‘contact‘:13246910612}] for i in a: print(i)
我们可以用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") #这是不正确的信息
从上面代码中看不出任何的毛病,你可以执行一下:
为什么明明我们输入了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
为什么会出现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 = 0 for i 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")