如何实现有变更时输出指定内容、无变更时返回False?
解决Python脚本变更检测的逻辑问题
问题分析
原脚本中,当previous_data和data完全一致时,check_changes返回的空字典{'new': [], 'increased': []}会被Python判定为真值,导致if分支错误执行。需要调整逻辑,实现:有新增/级别提升时输出指定格式,无变更时返回False。
修改后的代码
STOCK_MAP = { 'low': 1, 'medium': 2, 'high': 3 } previous_data = { 'item': { '1': 'HIGH', '2': 'HIGH', '3': 'HIGH', '4': 'MEDIUM', } } data = { 'item': { '1': 'LOW', '2': 'HIGH', '3': 'HIGH', '4': 'HIGH', '5': 'HIGH', } } def check_changes(data: dict): found_change = {'new': [], 'increased': []} prev_items = previous_data.get('item', {}) for att, value in data['item'].items(): prev_value = prev_items.get(att) if not prev_value: found_change['new'].append(att) else: current_level = STOCK_MAP[value.casefold()] prev_level = STOCK_MAP[prev_value.casefold()] if current_level > prev_level: found_change['increased'].append(att) # 无变更时返回False,否则返回变更信息 return found_change if any(found_change.values()) else False if changes := check_changes(data): output_parts = [] if changes['new']: output_parts.append(f"Item Added: {', '.join(changes['new'])}") if changes['increased']: output_parts.append(f"Item Level Increased: {', '.join(changes['increased'])}") print(f"Found Change! ({'; '.join(output_parts)})") else: print("No changes detected.")
关键修改点
- 函数返回值调整:在函数末尾检查
found_change的两个列表是否有内容,any(found_change.values())判断是否存在非空列表,无变更时返回False,避免空字典被误判为真值。 - 格式化输出:根据变更类型(新增/级别提升)拼接对应的提示文本,输出更友好的格式。
- 代码优化:提前获取
prev_items,避免重复调用previous_data.get('item', {}),提升可读性。
内容的提问来源于stack exchange,提问作者PythonNewbie
相关产品推荐
相关产品推荐

