我有一个字典列表,我正在尝试循环,需要检查rulenames
中的'pmdruleid'
与activeclientrulelist
中的任何'pmdruleid'
匹配。我正在使用下面的代码,每次都得到None
。下面的代码检查循环中相应的索引值,而不是检查列表中的任何匹配值:
activeclientrulelist = [{'pmdruleid': 112, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid': 10160, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid': 10016, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid':111, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid': 111, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid': 10020, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1}]
rulenames = [{'pmdruleid': 112, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid': 10160, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1}]
if len(activeclientrulelist) > 0:
for rule in rulenames:
matching_active_client_rule_items = [y for y in activeclientrulelist if y['pmdruleid'] == rule['pmdruleid']
预期产量
[{'pmdruleid': 112, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1},
{'pmdruleid': 10160, 'createdby': 'Ad hoc Script - PHARMMD\\Jake.Woods', 'updatedby': None, 'transferstatuscode': 1}]
问题似乎是列表每次都会刷新,所以我将其更改如下:
我在上面定义了一个空列表,并通过正确的项扩展了该列表
如果要查找两个词典列表之间的交叉点,可以执行以下操作:
而{}将是:
如果你只想考虑^ {CD2>}你可以做,不需要在列表外循环^ ^},你可以改写结果:
您当前的代码有几个问题:
matching_active_client_rule_items = [y for y in activeclientrulelist if y['pmdruleid'] == rule['pmdruleid']
行的末尾缺少一个]
李>matching_active_client_rule_items = [y for y in activeclientrulelist if y['pmdruleid'] == rule['pmdruleid']
中,您正在用rulenames
中最后一项的输出覆盖列表对象李>您需要创建一个列表并扩展该列表以修复代码:
虽然这是可行的,但您应该使用下面的列表理解方法来获得两个列表的交集:
相关问题 更多 >
编程相关推荐