Sep-09-2021, 03:23 PM
(This post was last modified: Sep-09-2021, 03:23 PM by wardancer84.)
hi,
nested dict:
the usuel flattening code:
which produces this
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.
nested dict:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
'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' }} |
1 2 3 4 5 6 7 |
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) |
1 |
[[ '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/' ]] |
any clever ideas how to do this in a reuseable way? i tried list str.replace and dict key.pop methods which all failed.