我是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条目值的元素,并打印它们及其键和值。我如何才能做到这一点?我使用requests模块发送get请求。
发布于 2017-07-31 04:22:31
对于名为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]发布于 2017-07-31 04:24:00
您可以创建将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])或者根据你的需要做类似的事情。
https://stackoverflow.com/questions/45404154
复制相似问题