terraform
我正在循环获取每个字典,在每个迭代中,我需要针对映射器检查一个字典,并根据#Input
dict_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 required
mapper = {"10.10.210.250":"black","192.168.2.1":"black"}
和dict_1.orig_h
之间的匹配添加一个标志。我可以根据需要灵活地定义映射器。
所以期望的结果是:
mapper.10.10.210.250
由于映射器中没有匹配值,因此dict_2将保持不变。
这是我想要的,但是仅当dict_1 = {"conn": {"ts":15,"uid":"ABC","orig_h":"10.10.210.250", "class":"black"}}
是orig_h
int
答案 0 :(得分:2)
没有太多要做的解释;如果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'}}
答案 1 :(得分:0)
为简单起见,提取conn
值:
conn_data = dict_1['conn']
conn_data['class'] = mapper[conn_data['orig_h']]
答案 2 :(得分:0)
两个衬里,提取类并指示'orig_h'
是否在mapper
字典的键中,如果它是id,请保留它,否则不要保留它,然后在其中创建一个新的字典理解列表理解以将'class'
添加到字典的'conn'
键的字典中。
l=[(i,mapper[i['conn']['orig_h']]) for i in (dict_1,dict_2) if i['conn']['orig_h'] in mapper]
print([{'conn':dict(a['conn'],**{'class':b})} for a,b in l])
顺便说一句,这个答案会自动选择字典