python - Dynamic nested dictionaries -


just begin know there couple similarly-titled questions on here, none explained quite way nor problem scope same.

i want add nested dictionary entries dynamically.

the use case thus: have python script monitoring network. dictionary created each observed ip protocol (tcp, udp, icmp) observed. sub-dictionary created key destination port (if 1 exists) each of these ip protocols (80, 443, etc.) (note doesn't matter whether sees server port source or destination, servers destination picked http , https examples). each of these destination ports key created corresponding server ip (e.g., ip www.google.com). , dictionary timestamp session first observed key , data/value key being client's ip.

however, want need populated time goes on since won't have data before execution nor @ initialization.

the output akin to:

{  'icmp' :    {  'echo-request' :        {  '<ip_of_www.google.com>' :            {   '<timestamp>' : <some_client_ip> }        }       'echo-reply' :        {  '<ip_of_www.google.com>' :            {   '<timestamp>' : <some_client_ip> }        }    }    'tcp' :    {       '80'         {  '<ip_of_www.google.com>' :            {   '<timestamp>' : <some_client_ip> }            {   '<timestamp>' : <some_client_ip> }        }       '443'         {  '<ip_of_encrypted.google.com>' :            {   '<timestamp>' : <some_client_ip> }            {   '<timestamp>' : <some_client_ip> }            {   '<timestamp>' : <some_client_ip> }            {   '<timestamp>' : <some_client_ip> }        }    } } 

thanks!

here are:

def set_nested(dict, value, *path):     level in path[:-1]:         dict = dict.setdefault(level, {})      dict[path[-1]] = value   d = {}  set_nested(d, '127.0.0.1', 'icmp', 'echo', 'google.com', '1 dec 2014') set_nested(d, '127.0.0.1', 'icmp', 'echo', 'google.com', '2 dec 2014') set_nested(d, '127.0.0.1', 'icmp', 'echo', 'yahoo.com', '2 dec 2014') set_nested(d, 'error', 'udp')  pprint import pprint pprint(d) 

output:

{'icmp': {'echo': {'google.com': {'1 dec 2014': '127.0.0.1',                                   '2 dec 2014': '127.0.0.1'},                    'yahoo.com': {'2 dec 2014': '127.0.0.1'}}},  'udp': 'error'} 

i'd suggest have @ json , tinydb if want store , query results.


Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -