我是python的新手,我试图实现以下目标: 向cloudera-Manager的IP发送获取请求,该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条目值的所有元素,并打印它们及其键和值。 我怎样才能做到这一点?我使用请求模块发送get请求。
答案 0 :(得分: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]
答案 1 :(得分: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])
或根据您的需要做类似的事情。