【问题标题】:Find duplicates in JSON using python使用 python 在 JSON 中查找重复项
【发布时间】:2017-07-30 20:02:33
【问题描述】:

我是 python 新手,我正在努力实现以下目标: 向 cloudera-Manager 的 IP 发送 get 请求,该 IP 将返回具有以下结构的主机 JSON:

{
  "items" : [ {
    "hostId" : "ddcfbea6-8a7c-462c-38f9-0116338e438a",
    "ipAddress" : "1.2.3.4",
    "hostname" : "host.example.com",
    "rackId" : "/rack01",
    "hostUrl" : "http://host.example.com:7180/cmf/hostRedirect/ddcfbea6-8a7c-462c-38f9-0116338e438a"
  }
...
}

JSON 可以包含数百个元素,我想找到所有具有相同 ipAddress 条目值的元素并打印它们以及它们的键和值。 我怎样才能做到这一点?我正在使用请求模块发送获取请求。

【问题讨论】:

  • 1) JSON 是否有规则的结构?还是任意结构? 2) 你知道你在找什么IP吗?
  • 您是想按 ip 地址对数据进行分组,还是给它一些地址以获取所有匹配的条目?
  • @COLDSPEED - 它确实具有常规结构,与我在问题中发布的结构相同。我不知道我要找的IP,只是在寻找重复项。
  • @SimonHobbs ,我不想分组。我更喜欢按原样扫描 json 以查找重复的 ipaddresses,当我发现这些重复项时,我想将它们打印出来,包括它们的其余键和值(例如 rackid 、 hosturl 等),而不仅仅是 IP 地址。跨度>

标签: python json linux cloudera cloudera-manager


【解决方案1】:

对于名为 hosts 的 JSON 对象,

hosts = {
  "items" : [ {
    "hostId" : "ddcfbea6-8a7c-462c-38f9-0116338e438a",
    "ipAddress" : "1.2.3.4",
    "hostname" : "host.example.com",
    "rackId" : "/rack01",
    "hostUrl" : "http://host.example.com:7180/cmf/hostRedirect/ddcfbea6-8a7c-462c-38f9-0116338e438a"
  }
...
}

您可以像这样按 IP 地址对项目进行分组

grouped_items = {}
for item in hosts["items"]:
        ip_address = item["ipAddress"]
        if ip_address in grouped_items:
                grouped_items[ip_address].append(item)
        else:
                grouped_items[ip_address] = [item]

【讨论】:

    【解决方案2】:

    您可以创建一个字典,将 IP 地址映射到对象列表。例如(如果 d 是您的示例字典):

    ipToObjects = {}
    
    for item in d['items']:
        if 'ipAddress' not in item:
            continue
        ip = item['ipAddress']
        if ip not in ipToObjects:
            ipToObjects[ip] = []
        ipToObject[ip].append(item)
    

    现在,如果您想查找重复项,您可以这样做:

    duplicates = [ ip for ip in ipToObjects.keys() if len(ipToObjects) >1 ]    
    for ip in duplicates:
        print(ipToObjects[ip])
    

    或者根据你的需要做类似的事情。

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2020-06-17
      • 1970-01-01
      • 2021-04-29
      • 2021-11-17
      相关资源
      最近更新 更多