You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现有变更时输出指定内容、无变更时返回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.")

关键修改点

  1. 函数返回值调整:在函数末尾检查found_change的两个列表是否有内容,any(found_change.values())判断是否存在非空列表,无变更时返回False,避免空字典被误判为真值。
  2. 格式化输出:根据变更类型(新增/级别提升)拼接对应的提示文本,输出更友好的格式。
  3. 代码优化:提前获取prev_items,避免重复调用previous_data.get('item', {}),提升可读性。

内容的提问来源于stack exchange,提问作者PythonNewbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:01:09