用Python解析字典和分组输出

用Python解析字典和分组输出,python,dictionary,grouping,Python,Dictionary,Grouping,假设我有一个 dictionary = { 'host_type' : {'public_ip':['ip_address','ip_address','ip_address'], 'private_dns':['dns_name','dns_name','dns_name']} } 有一些主机类型,比如说有3种主机类型:主、从、备份 对于每种主机类型,字典的输出可以包含不同数

假设我有一个

dictionary = {
              'host_type' : {'public_ip':['ip_address','ip_address','ip_address'], 
                             'private_dns':['dns_name','dns_name','dns_name']} 
              }
有一些主机类型,比如说有3种主机类型:主、从、备份

对于每种主机类型,字典的输出可以包含不同数量的主机。例如,对于2个主设备、6个从设备和2个备份,字典如下所示:

dictionary = 
   {
    'master' : {
                'public_ip':['ip_address','ip_address'], 
                'private_dns': ['dns_name','dns_name']
               },
    'slave' : {
               'public_ip':['ip_address','ip_address', 'ip_address','ip_address','ip_address','ip_address'], 
               'private_dns': ['dns_name','dns_name','dns_name','dns_name','dns_name','dns_name']
              },
    'backup' : {
                'public_ip':['ip_address','ip_address'],
                'private_dns':['dns_name','dns_name']
               }
    }
现在我想解析字典并对主机进行分组,这样我总是有1个主、1个备份和3个从属。如何解析这样的字典以达到类似的效果:

master,public_ip,private_dns
backup,public_ip,private_dns
slave,public_ip,private_dns
slave,public_ip,private_dns
slave,public_ip,private_dns

master,public_ip,private_dns
backup,public_ip,private_dns
slave,public_ip,private_dns
slave,public_ip,private_dns
slave,public_ip,private_dns
可能有更好的解决方案来解析字典中的所有列表,但这应该是可行的

d = {
'master' : {
            'public_ip':['ip_address0M','ip_address1M'], 
            'private_dns': ['dns_name','dns_name']
           },
'slave' : {
           'public_ip':['ip_address0s','ip_address1s', 'ip_address2s','ip_address3s','ip_address4s','ip_address5s'], 
           'private_dns': ['dns_name','dns_name','dns_name','dns_name','dns_name','dns_name']
          },
'backup' : {
            'public_ip':['ip_address0b','ip_address1b'],
            'private_dns':['dns_name','dns_name']
           }
}


masterCount = 0
slavecount = 0
backupCount = 0

result = list()

while(masterCount + 1 <= len(d['master']['public_ip']) and slavecount + 3 <= len(d['slave']['public_ip']) and backupCount + 1 <= len(d['backup']['public_ip'])):
    result.append([])
    tempList = [d['master']['public_ip'][masterCount], d['slave']['public_ip'][slavecount:slavecount+3], d['backup']['public_ip'][backupCount]]
    result[masterCount].append(tempList)
    masterCount+=1
    slavecount+=3
    backupCount==1

print(result)

可能有更好的解决方案来解析字典中的所有列表,但这应该是可行的

我尝试了一个grouper函数,所以我得到了形式为:(public_ip,private_dns)的输出,但我仍然需要按1 master,1 backup,3 laves对其进行分组。我不需要确切的答案,但可能需要一个提示来引导我。我尝试了一个grouper函数,所以我得到了形式为:(public_ip,private_dns)的输出,但我仍然需要按1 master对其进行分组,1备份,3我不需要确切的答案,但可能需要一个提示,让我走上正确的方向。嘿!谢谢你的回答。我做的有点不同,但你的回答让我明白了。谢谢我同意你的回答,谢谢。很高兴我能帮忙。嘿!谢谢你的回答。我做的有点不同,但你的回答让我明白了。谢谢我同意你的回答,谢谢。很高兴我能帮忙。
d = {
'master' : {
            'public_ip':['ip_address0M','ip_address1M'], 
            'private_dns': ['dns_name','dns_name']
           },
'slave' : {
           'public_ip':['ip_address0s','ip_address1s', 'ip_address2s','ip_address3s','ip_address4s','ip_address5s'], 
           'private_dns': ['dns_name','dns_name','dns_name','dns_name','dns_name','dns_name']
          },
'backup' : {
            'public_ip':['ip_address0b','ip_address1b'],
            'private_dns':['dns_name','dns_name']
           }
}


masterCount = 0
slavecount = 0
backupCount = 0

result = list()

while(masterCount + 1 <= len(d['master']['public_ip']) and slavecount + 3 <= len(d['slave']['public_ip']) and backupCount + 1 <= len(d['backup']['public_ip'])):
    result.append([])
    tempList = [d['master']['public_ip'][masterCount], d['slave']['public_ip'][slavecount:slavecount+3], d['backup']['public_ip'][backupCount]]
    result[masterCount].append(tempList)
    masterCount+=1
    slavecount+=3
    backupCount==1

print(result)
[[['ip_address0M', ['ip_address0s', 'ip_address1s', 'ip_address2s'], 'ip_address0b']], [['ip_address1M', ['ip_address3s', 'ip_address4s', 'ip_address5s'], 'ip_address0b']]]