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

Python字典逻辑问题求助:集合值与列表字典permission_id匹配后字段赋值不符合预期

解决字典列表中添加匹配状态字段的问题

嘿,我来帮你搞定这个问题!你当前代码的问题出在内层的for i in o循环上——它会反复覆盖InThisRole的值,导致第一个本应是True的结果被改成了False。比如处理permission_id=1的字典时,第一次循环i=1会把InThisRole设为True,但紧接着循环到i=2,因为1≠2,又把它改成了False,这就和你的预期不符了。

修复后的代码

其实根本不需要内层循环,直接利用集合的成员判断就能一步到位解决问题:

o = {1, 2}
lll = [
    {'permission_id': 1, 'permission_name': 'can_view_test'},
    {'permission_id': 2, 'permission_name': 'can_edit_test'},
    {'permission_id': 4, 'permission_name': 'can_delete_test'}
]
new_list = []
for item in lll:
    # 复制原字典,避免修改原始数据
    updated_item = item.copy()
    # 直接判断permission_id是否在集合o中,设置对应状态
    updated_item["InThisRole"] = updated_item["permission_id"] in o
    new_list.append(updated_item)
print(new_list)

为什么这样改?

  • 去掉冗余循环:用in操作替代内层循环,代码更简洁,同时集合的成员查找效率比列表更高
  • 避免值覆盖:一次判断就能得到正确的布尔值,不会出现多次赋值覆盖结果的问题
  • 简化字典复制:直接调用item.copy()复制原字典,省去手动赋值permission_id和permission_name的步骤,减少出错可能

运行结果

执行这段代码后,就能得到你想要的预期结果:

[{'permission_id': 1, 'permission_name': 'can_view_test', 'InThisRole': True}, {'permission_id': 2, 'permission_name': 'can_edit_test', 'InThisRole': True}, {'permission_id': 4, 'permission_name': 'can_delete_test', 'InThisRole': False}]

内容的提问来源于stack exchange,提问作者Ahmad Akel Omar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:44:11