Flask开发:holds[range(len(holds))]不生效,如何匹配JSON图书标题
Flask图书匹配逻辑异常修复方案
错误原因
原代码中holds[range(len(holds))]写法不符合Python语法规则:range()返回的是整数序列,无法直接作为列表的索引取值,因此会触发运行错误。
修正实现
方案1:符合原始遍历需求的写法
完全按照「依次取holds[0]、holds[1]等值校验」的逻辑实现:
# 提前初始化变量,避免运行报错 holds = [] matching_posts = {"books": []} # 原有生成holds列表的代码可直接保留 for customer in customer_data['customers']: if len(customer['books']) > 0: for book in customer['books']: holds.append(book) # 修正后的匹配逻辑 for post in posts['books']: # 遍历holds列表的下标,依次取对应书名比对 for i in range(len(holds)): if post['title'] == holds[i]: matching_posts['books'].append(post) break
方案2:简化写法(推荐)
利用Python成员运算符in简化逻辑,代码更简洁易读,运行效率更高:
holds = [] matching_posts = {"books": []} # 生成holds列表的代码不变 for customer in customer_data['customers']: if len(customer['books']) > 0: for book in customer['books']: holds.append(book) # 简化匹配逻辑 for post in posts['books']: if post['title'] in holds: matching_posts['books'].append(post)
注意事项
若图书title存在首尾空白/换行符,可以加strip()处理避免匹配失败:if post['title'].strip() in holds
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

