【问题标题】:Compare dictionary key with value and identify mismatch with python将字典键与值进行比较并识别与 python 的不匹配
【发布时间】:2020-06-08 21:03:19
【问题描述】:

我有以下字典:

dict1 = { 
    '10.10.10.0/24':'net-10.10.10.10-24',
    '10.10.1.0/27':'net-10.10.1.0-27',
    '10.8.8.1':'host-10.8.8.1-32',
    '8.8.8.8/32':'hst-8.8.8.8',
    '192.168.10.1':'hst-186.20.12.1-32'
    }

我正在寻找可以检测关键 IP 地址(子网暂时不相关)和值 IP 地址之间任何不匹配的方法,例如最后一个键 192.68.10.1 与 186.20.12.1 不匹配。 我尝试在添加到字典之前对元素应用切片或替换,但效果不佳。 如何识别差异最合适的方法是什么? 提前致谢!

【问题讨论】:

  • 您可以遍历dict1.items(),使用正则表达式提取 IPv4 地址并进行比较?
  • 第一项呢?不是错配吗?
  • 请说明您已经尝试过什么以及它到底出了什么问题,以便我们提供帮助。您不希望只获得免费代码,是吗? ;)

标签: python-3.x


【解决方案1】:

如果字典中的键和值遵循问题中的格式,则可以使用此脚本(此脚本未考虑子网):

import re

dict1 = {
    '10.10.10.0/24':'net-10.10.10.10-24',
    '10.10.1.0/27':'net-10.10.1.0-27',
    '10.8.8.1':'host-10.8.8.1-32',
    '8.8.8.8/32':'hst-8.8.8.8',
    '192.168.10.1':'hst-186.20.12.1-32'
}

r = re.compile(r'\d+')

for k, v in dict1.items():
    if [*map(int, r.findall(k))][:4] != [*map(int, r.findall(v))][:4]:
        print('{} {} mismatch!'.format(k, v))

打印:

10.10.10.0/24 net-10.10.10.10-24 mismatch!
192.168.10.1 hst-186.20.12.1-32 mismatch!

【讨论】:

  • 怎么可能?第一个也不匹配......(10.10.10.0 vs. 10.10.10.10
  • @Tomerikoo 好收获!应该是 [:4] 而不是 [:3]
猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2017-06-21
相关资源
最近更新 更多