Sep-09-2021, 03:23 PM
(This post was last modified: Sep-09-2021, 03:23 PM by wardancer84.)
hi,
nested dict:
any clever ideas how to do this in a reuseable way? i tried list str.replace and dict key.pop methods which all failed.
nested dict:
'identity': {'AIX_REG_CLIENT_VER': '0.1-alpha',
'HOSTNAME': 'sag01147',
'SYSTEM_NAME': 'SAG01147_JBOSS4_HA'},
'nodeinfo': {'CLUSTER_NAME': 'JBOSS4',
'CLUSTER_NODENAME': 'sag01147',
'CLUSTER_NODES': 'kug01147,sag01147',
'CLUSTER_RGS': 'JBOSS33,JBOSS34,JBOSS37,JBOSS38',
'CL_RGS': 'JBOSS38',
'CPU_ENTC': '0.60',
'CPU_VALUE': '4',
'HAS_COBOL': '0',
'HAS_JBOSS': '1',
'HAS_ORACLE': '0',
'HAS_SAP': '0',
'HAS_TUXEDO': '0',
'HAS_UC4': '0',
'HA_LEVEL': '7.2.4 SP2',
'IP': {'en0': '172.17.10.147',
'en1': '172.16.88.57',
'en2': '172.16.12.147'},
'IP_LONG': {'en0': '172.17.10.147/255.255.248.0/172.17.15.255/',
'en1': '172.16.88.57/255.255.192.0/172.16.127.255/sag01147-ipl.some.domain',
'en2': '172.16.12.147/255.255.254.0/172.16.13.255/'},
'IS_CLUSTER': '1',
'IS_LPM': '0',
'IS_ZPI': '0',
'IS_ZPV': '0',
'Java6': '6.0.0.655',
'Java6_64': '6.0.0.655',
'Java7': '7.0.0.665',
'Java7_64': '7.0.0.665',
'Java8_64': '8.0.0.610',
'LOCATION': 'Geiselberg',
'MACHINE_SERIAL': 'XXXXXX',
'MAN_SYS_NAME': 'GBG02',
'MEM_VALUE': '61440',
'OS_LEVEL': '7200-04-03-2038',
'STORAGE_VALUE': '258',
'UPTIME': '54',
'YUM_REPO': 'IBM'},
'timestamp': {'DATETIME': '2021-09-09T17:04:32'}}the usuel flattening code:for key, value in sample['nodeinfo'].items():
if isinstance(value, dict):
for key, value in value.items():
entries.append([key, value])
else:
entries.append([key, value])
print(entries)which produces this[['HAS_COBOL', '0'], ['HAS_TUXEDO', '0'], ['HAS_SAP', '0'], ['HAS_ORACLE', '0'], ['IS_LPM', '0'], ['HAS_JBOSS', '1'], ['IS_ZPI', '0'], ['IS_ZPV', '0'], ['HAS_UC4', '0'], ['MEM_VALUE', '61440'], ['CPU_VALUE', '4'], ['STORAGE_VALUE', '258'], ['MAN_SYS_NAME', 'GBG02'], ['LOCATION', 'Geiselberg'], ['OS_LEVEL', '7200-04-03-2038'], ['UPTIME', '54'], ['MACHINE_SERIAL', 'XXXXX'], ['CPU_ENTC', '0.60'], ['YUM_REPO', 'IBM'], ['Java6', '6.0.0.655'], ['Java6_64', '6.0.0.655'], ['Java7', '7.0.0.665'], ['Java7_64', '7.0.0.665'], ['Java8_64', '8.0.0.610'], ['IS_CLUSTER', '1'], ['CLUSTER_NAME', 'JBOSS4'], ['CLUSTER_NODES', 'kug01147,sag01147'], ['CLUSTER_NODENAME', 'sag01147'], ['CLUSTER_RGS', 'JBOSS33,JBOSS34,JBOSS37,JBOSS38'], ['HA_LEVEL', '7.2.4 SP2'], ['CL_RGS', 'JBOSS38'], ['en0', '172.17.10.147'], ['en1', '172.16.88.57'], ['en2', '172.16.12.147'], ['en0', '172.17.10.147/255.255.248.0/172.17.15.255/'], ['en1', '172.16.88.57/255.255.192.0/172.16.127.255/sag01147-ipl.some.domain'], ['en2', '172.16.12.147/255.255.254.0/172.16.13.255/']]as the "en" stuff is only to keep dict keys unique, i need to replace them with the name of the containing dict, "IP" for example.
any clever ideas how to do this in a reuseable way? i tried list str.replace and dict key.pop methods which all failed.

i do this for self educational purposes to make me