使用python在JSON中查找重复项

问题描述 投票:2回答:2

我是python的新手,我正在尝试实现以下功能:向cloudera-Manager的IP发送get请求,该请求返回具有以下结构的主机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条目值的所有元素,并打印它们及其键和值。我怎样才能做到这一点?我正在使用请求模块发送get请求。

python json linux cloudera cloudera-manager
2个回答
2
投票

对于名为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]

0
投票

您可以创建将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])

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

© www.soinside.com 2019 - 2024. All rights reserved.