Python同步遍历字典与列表 生成符合条件的按钮字典列表
问题核心
你当前逻辑的缺口是没有建立收入活动项标识和对应按钮标题的关联关系:income_activities和button_titles两个列表按索引位置严格一一对应,但你把活动项和取值拼成字典后,没有存储活动项对应的标题,遍历字典时自然无法取出匹配的title值。另外Python 3.7之前的版本字典不保证插入顺序,靠遍历顺序匹配标题容易出现乱序错误。
可直接运行的修正代码
稳妥兼容写法(全Python版本通用,不受顺序影响)
先提前构建活动项到按钮标题的映射关系,遍历判断取值时直接查映射取标题即可:
income_activities = ['question_fishing','question_livestock','question_firewood','question_crop'] income_activities_values = [tracker.get_slot("question_fishing"), tracker.get_slot("question_livestock"), tracker.get_slot("question_firewood"), tracker.get_slot("question_crop")] activity_value_dict = dict(zip(income_activities, income_activities_values)) button_titles = ['Fishing', 'Livestock', 'Firewood', 'Crop'] # 构建活动标识 -> 按钮标题的映射 activity_title_map = dict(zip(income_activities, button_titles)) buttons = [] for activity_key, value in activity_value_dict.items(): if value == 'yes': buttons.append({ "payload": '/affirm', "title": activity_title_map[activity_key] })
简洁写法(Python 3.7+适用,保证列表顺序对齐即可)
直接按索引并行遍历三个列表,遍历过程中直接拿到对应位置的取值和按钮标题,不需要额外构建字典:
buttons = [] for activity_key, activity_val, btn_title in zip(income_activities, income_activities_values, button_titles): if activity_val == 'yes': buttons.append({"payload": '/affirm', "title": btn_title})
运行结果
传入你给出的示例取值{'question_fishing': 'yes', 'question_livestock': 'yes', 'question_firewood': 'no', 'question_crop': 'yes'},最终生成的buttons和预期完全一致:
[ {"payload":'/affirm', "title": "Fishing"}, {"payload":'/affirm', "title": "Livestock"}, {"payload":'/affirm', "title": "Crop"} ]
内容的提问来源于stack exchange,提问作者Wupppa
相关产品推荐
相关产品推荐

