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
相关产品推荐
相关产品推荐

