papapalongtime 发表于 2020-12-23 19:18:38

一个关于列表值为字典,进行遍历的求助

card_List = [{'name':'张三','phone':'123','email':'123@qq.com'},
             {'name':'李四','phone':'234','email':'234@qq.com'},
             {'name':'王五','phone':'345','email':'345@qq.com'},
             {'name':'赵九','phone':'456','email':'456@qq.com'}
             ]
FindName = input('请输入你要查询的名字:')
for card_dict in card_List:
    if card_dict['name'] == FindName:
      print('姓名\t\t\t手机号\t\t\t邮箱')
      print('{}\t\t\t{}\t\t\t{}'.format(
                            card_dict['name'],
                            card_dict['phone'],
                            card_dict['email']
             ))
      break
    else:
      print('该员工不存在')

    #print(card_dict)


因为Crad_list 中有4个值为字典的列表
所以在遍历这个列表时 for循环下面的else会被执行好几次
需求是 当我找到在列表中的字典并且打印输出      之前的 或者剩下的遍历循环中中 不会esle 以后的代码不会被执行
想了一天了 求大佬解救

jackz007 发表于 2020-12-23 19:37:26

本帖最后由 jackz007 于 2020-12-23 20:13 编辑

      else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正常结束的时候会执行到里面。如果是 break 退出的循环,就不会执行。
      遍历寻找的逻辑是这样的,如果找到,可以当即下结论并退出循环,但是,没有找到的结论必须要在循环结束了才可以下。
card_List = [{'name':'张三','phone':'123','email':'123@qq.com'},
             {'name':'李四','phone':'234','email':'234@qq.com'},
             {'name':'王五','phone':'345','email':'345@qq.com'},
             {'name':'赵九','phone':'456','email':'456@qq.com'}]
FindName = input('请输入你要查询的名字:') . strip()
if FindName:
    for d in card_List:
      if d['name'] == FindName:
            print('{}\t\t\t{}\t\t\t{}'.format(
                            d['name'],
                            d['phone'],
                            d['email']))
            break
    else:
      print('该员工不存在')

papapalongtime 发表于 2020-12-23 19:46:05

jackz007 发表于 2020-12-23 19:37
else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正 ...

strip()方法是干嘛的啊
我的else是和if同级缩进的

jackz007 发表于 2020-12-23 19:58:38

papapalongtime 发表于 2020-12-23 19:46
strip()方法是干嘛的啊
我的else是和if同级缩进的

      else 的缩进位置是我专门修改的,先看看你的问题解决了没有?
      strip() 是字符串的方法,作用是删除字符串首尾的空白字符,像空格、TAB、回车、换行符都属于空白字符,在我的这种写法中,如果键盘输入是一个空回车的话,程序就会直接退出,这是专门为程序设置的退出通道。

papapalongtime 发表于 2020-12-23 20:08:23

jackz007 发表于 2020-12-23 19:58
else 的缩进位置是我专门修改的,先看看你的问题解决了没有?
      strip() 是字符串的方法,作 ...

NameError: name 'card_list' is not defined

jackz007 发表于 2020-12-23 20:14:09

papapalongtime 发表于 2020-12-23 20:08
NameError: name 'card_list' is not defined

      二楼的代码已经修改,请再测

papapalongtime 发表于 2020-12-23 21:21:15

jackz007 发表于 2020-12-23 20:14
二楼的代码已经修改,请再测

谢谢大哥   for循环直接用break就行了else :和    for循环同级 缩颈就可以了

                                                                print(‘该员工不存在’)

papapalongtime 发表于 2020-12-23 21:21:55

jackz007 发表于 2020-12-23 20:14
二楼的代码已经修改,请再测

感谢大哥的付出因为我不知道else是单独的语句

jackz007 发表于 2020-12-23 21:27:13

papapalongtime 发表于 2020-12-23 21:21
谢谢大哥   for循环直接用break就行了else :和    for循环同级 缩颈就可以了

                     ...

      Python 语言的 for 语句是可以带 else 语句的,如果循环自然结束(非 break 退出),else 语句块就会被执行,本例利用的正是这种情形。

XZUXuVanyu 发表于 2020-12-23 21:51:42

jackz007 发表于 2020-12-23 19:37
else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正 ...

懂了,学到了
页: [1]
查看完整版本: 一个关于列表值为字典,进行遍历的求助