基于值的python中的LEFT JOIN字典

时间:2018-08-29 10:00:51

标签: python dictionary

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

3 个答案:

答案 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])

顺便说一句,这个答案会自动选择字典