为了账号安全,请及时绑定邮箱和手机立即绑定

python中基于值的LEFT JOIN字典

python中基于值的LEFT JOIN字典

函数式编程 2021-06-03 13:49:11
#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'}}


查看完整回答
反对 回复 2021-06-06
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

conn为简单起见提取值:


conn_data = dict_1['conn']

conn_data['class'] = mapper[conn_data['orig_h']]


查看完整回答
反对 回复 2021-06-06
  • 3 回答
  • 0 关注
  • 299 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信