python中基于值的LEFT JOIN字典

#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_1 = {"conn": {"ts":15,"uid":"ABC","orig_h":"10.10.210.250", "class":"black"}}

dict_2 将保持不变,因为映射器中没有匹配的值。


这有点像我想要的,但只有当orig_h它是int


import collections

result = 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)


函数式编程
浏览 300回答 3
3回答

慕神8447489

没有太多解释要做;如果 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猫小萌

conn为简单起见提取值:conn_data = dict_1['conn']conn_data['class'] = mapper[conn_data['orig_h']]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python