Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python在JSON中查找重复项_Python_Json_Linux_Cloudera_Cloudera Manager - Fatal编程技术网

使用python在JSON中查找重复项

使用python在JSON中查找重复项,python,json,linux,cloudera,cloudera-manager,Python,Json,Linux,Cloudera,Cloudera Manager,我是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

我是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 entry值的元素,并打印它们及其键和值。
我怎样才能做到这一点?我正在使用请求模块发送get请求

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

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

现在,如果要查找重复项,可以执行以下操作:

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

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

可能相关:1)JSON是否有规则的结构?或者是任意构造的?2) 你知道你在寻找什么IP吗?你是想按IP地址对数据进行分组,还是给它一个地址,以便获得与之匹配的所有条目?@COLDSPEED-它确实有一个规则的结构,与我在问题中发布的结构相同。我不知道我要找的IP,只是在寻找重复的。@SimonHobbs,我不想把它分组。我更喜欢按原样扫描json以查找重复的IP地址,当我找到这些重复的IP地址时,我希望打印出来,包括它们的其余键和值(如rackid、hosturl等),而不仅仅是IP地址。
duplicates = [ ip for ip in ipToObjects.keys() if len(ipToObjects) >1 ]    
for ip in duplicates:
    print(ipToObjects[ip])