#Inputdict_1 = {"conn": {"ts":15,"uid":"ABC","orig_h":"10.10.210.250"}}dict_2 = {"conn": {"ts":15,"uid":"ABC","orig_h":"10.10.210.252"}}#Mapper can be modified as requiredmapper = {"10.10.210.250":"black","192.168.2.1":"black"} 我得到一个循环的每个字典,在每次迭代中,我需要根据之间的匹配所要检查的映射器一个字典并附加标志dict_1.orig_h和mapper.10.10.210.250。我可以灵活地定义映射器,但我需要。所以想要的结果是:dict_1 = {"conn": {"ts":15,"uid":"ABC","orig_h":"10.10.210.250", "class":"black"}}dict_2 将保持不变,因为映射器中没有匹配的值。这有点像我想要的,但只有当orig_h它是intimport collectionsresult = collections.defaultdict(dict)for d in dict_1: result[d[int('orig_h')]].update(d)for d in mapper: result[d[int('orig_h')]].update(d)
3 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
没有太多解释要做;如果 ip 在映射器字典中(如果mapper有一个键就是那个 ip),那么将所需的属性设置dict为mapper字典中键的值('black'这里)。
def update_dict(dic, mapper):
ip = dic['conn']['orig_h']
if ip in mapper:
dic['conn']['class'] = mapper[ip]
完全按要求工作:
>>> update_dict(dict_1, mapper)
>>> dict_1
{'conn': {'ts': 15, 'uid': 'ABC', 'orig_h': '10.10.210.250', 'class': 'black'}}
>>> update_dict(dict_2, mapper)
>>> dict_2
{'conn': {'ts': 15, 'uid': 'ABC', 'orig_h': '10.10.210.252'}}
Smart猫小萌
TA贡献1911条经验 获得超7个赞
conn为简单起见提取值:
conn_data = dict_1['conn']
conn_data['class'] = mapper[conn_data['orig_h']]
添加回答
举报
0/150
提交
取消