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

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

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") #这是不正确的信息

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

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

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 = 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")