Python遍历字典列表查找元素 非0索引项匹配失败问题求助
问题根因
你写的代码存在两个核心问题,导致非索引0位置的书籍无法被匹配:
- 循环逻辑错误:
for循环内的else分支和return False语句放在了循环体内部,第一次循环检查索引0的书籍不匹配时,会直接执行return False终止整个方法,根本不会执行后续索引位置的检查 - 列表定义语法错误:你定义
availablebooks时给每本书单独套了方括号、用逗号分隔,实际生成的是包含两个单元素列表的元组,不是你预期的「字典组成的列表」,遍历取值时会出现结构不匹配的问题
修正方案
1. 修正藏书列表结构
把所有书籍字典放在同一个方括号内,组成标准的字典列表:
availablebooks = [ {'Title': 'Eloquent JavaScript, Third Edition', 'Author': 'Marijn Haverbeke'}, {'Title': 'Practical Modern JavaScript', 'Author': 'Nicolás Bevacqua'} ]
2. 修正借书方法逻辑
把「未找到书籍」的提示和返回逻辑移到循环外部,确保遍历完所有藏书后再判断是否存在目标书籍:
class Library: # 你已有的其他类方法保持不变即可 def borrowBook(self, bookname): # 遍历同时获取索引和书籍信息,方便后续删除操作 for book_idx, book_info in enumerate(availablebooks): if bookname in book_info['Title']: print("Here is your book! Enjoy") availablebooks.pop(book_idx) return True # 所有书籍遍历完成仍未匹配,才触发未找到提示 print("The book is not available") return False
修改说明
- 循环逻辑调整后,不会因为第一本书不匹配就直接终止方法,会逐本检查所有在架藏书
- 用
enumerate()替代range(len())的遍历写法,可读性更高,删除匹配书籍时也不会出现索引错位问题 - 修正后的列表结构符合预期,遍历时可以直接取到每本书的字典对象,不会出现取值报错
内容的提问来源于stack exchange,提问作者Mausam Bahar Barbhuiya
相关产品推荐
相关产品推荐

