首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python在JSON中查找重复项

使用python在JSON中查找重复项
EN

Stack Overflow用户
提问于 2017-07-31 04:02:34
回答 2查看 5.5K关注 0票数 3

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

代码语言:javascript
复制
{
  "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条目值的元素,并打印它们及其键和值。我如何才能做到这一点?我使用requests模块发送get请求。

EN

回答 2

Stack Overflow用户

发布于 2017-07-31 04:22:31

对于名为hosts的JSON对象,

代码语言:javascript
复制
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地址对项目进行分组,如下所示

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-07-31 04:24:00

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

代码语言:javascript
复制
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)

现在,如果您想查找重复项,只需执行以下操作:

代码语言:javascript
复制
duplicates = [ ip for ip in ipToObjects.keys() if len(ipToObjects) >1 ]    
for ip in duplicates:
    print(ipToObjects[ip])

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45404154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档