【问题标题】:Compare a value(in dict) in one list with another list [Python]将一个列表中的值(在 dict 中)与另一个列表进行比较 [Python]
【发布时间】:2021-08-24 23:11:48
【问题描述】:

我有两个这样的列表(和里面的字典);

list1 = [
    {'ID': 0, 'IP': '192.168.1.1', 'Hostname': 'hostname1'}, 
    {'ID': 1, 'IP': '192.168.1.2', 'Hostname': 'hostname2'}, 
    {'ID': 2, 'IP': '192.168.1.3', 'Hostname': 'hostname3'}, 
    {'ID': 3, 'IP': '192.168.1.4', 'Hostname': 'hostname4'}
]
list2= [
    {'Q1': 'HOST_hostname9_192.168.9.0', 'Time' :'Fri, 13 Aug 2021 03:25:01 +0300'},
    {'Q1': 'HOST_hostname3_192.168.9.4', 'Time' :'Tue, 17 Aug 2021 13:48:39 +0300'},
    {'Q1': 'HOST_hostname7_192.168.1.2', 'Time' :'Fri, 13 Aug 2021 03:25:01 +0300'}
]

我想在 Q1list1 中的 'IP' 或 'Hostname' 字段中搜索数据/strong> 在 list2 中。如果有,我想输出 okey,如果没有,我想输出 no。

例如; '192.168.1.2' 在 Q1 中,输出 OKAY 或 'hostname3' 相同,输出 OKAY。 但是,192.168.1.1hostname1(我们可以认为这些数据是相互关联的。),它应该给出 NO 输出,因为它在任何 Q1 中都找不到。

我希望我能解释一下。 谢谢。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 更正list1 的代码,因为它不会按原样运行。
  • 为什么192.168.1.2 输出hostname3。它似乎与list1 中的hostname2list2 中的hostname7 有关。

标签: python list dictionary compare


【解决方案1】:

ips= {y.get("IP", ""):y.get("hostnames","") for y in list1} result= [ y.get("hostname",None) for y in list2 if y.get("hostname",None) in ips.values()]

类似的东西。

【讨论】:

    【解决方案2】:

    这似乎回答了这个问题,如果我理解的话......

    或示例; '192.168.1.2' 在 Q1 中并且输出正常或 'hostname3' 是一样的,

    list1 = [
    {'ID': 0, 'IP': '192.168.1.1', 'Hostname': 'hostname1'}, 
    {'ID': 1, 'IP': '192.168.1.2', 'Hostname': 'hostname2'}, 
    {'ID': 2, 'IP': '192.168.1.3', 'Hostname': 'hostname3'}, 
    {'ID': 3, 'IP': '192.168.1.4', 'Hostname': 'hostname4'}]
    
    list2= [
        {'Q1': 'HOST_hostname9_192.168.9.0', 'Time' :'Fri, 13 Aug 2021 03:25:01 +0300'},
        {'Q1': 'HOST_hostname3_192.168.9.4', 'Time' :'Tue, 17 Aug 2021 13:48:39 +0300'},
        {'Q1': 'HOST_hostname7_192.168.1.2', 'Time' :'Fri, 13 Aug 2021 03:25:01 +0300'}
       ]
    
    #brutal or clever?  hmmm...
    x = str(list2)
    
    for item in list1:
        for key in item.keys():
            if key in ['IP', 'Hostname']:
                if item[key] in x:
                    print('OK', item[key])
    
    #>> OK 192.168.1.2
    #>> OK hostname3
    

    【讨论】:

      【解决方案3】:

      维护数据的最佳方式是使用数据库。您可以查看https://www.xplenty.com/blog/which-database/ 以找到最适合您的案例的数据库... 但是对于这个问题,您可以尝试以下代码:

        error = None
        for obj in list2:
            for key in obj.keys():
                if key is 'Q1' or key is 'Hostname':
                    print(obj[key])
                else:
                    error = "Not Found"
        if error:
            print(error)
      

      希望我能帮上忙;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 2021-03-06
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        相关资源
        最近更新 更多