[Tutor] Declaring a compound dictionary structure.

Steven D'Aprano steve at pearwood.info
Sun Mar 14 02:13:29 CET 2010


On Sun, 14 Mar 2010 10:06:49 am Ray Parrish wrote:
> Hello,
>
> I am stuck on the following -
>
>                     # Define the Dates{}
> dictionary structure as a dictionary
>                     # containing two dictionaries,
> each of which contains a list.
>                     Dates =
> {Today:{ThisIPAddress:[]},
> Tomorrow:{ThisIPAddress:[]}}
>
> How do I pass this declaration empty values for
> Today, Tomorrow, and ThisIPAddress to initially
> clare it? 

You don't. Once you create a key, you can't modify it. So if you create 
an empty value for Today etc., it stays empty. 


> The idea behind the structure is to sort through a
> server log that contains entries for two dates,
[...]

Just work out the dates before hand, and populate the dictionary that 
way:

today = "2010-03-13"
tomorrow = "2010-03-14"
thisIP = "123.456.789.123"
entries = {today: {thisIP: []}, tomorrow: {thisIP: []}}

Or don't pre-populate the dict at all.

entries = {}
for line in logfile:
    # Process the line to get a date, an IP address, and visitor
    date = ...
    address = ...
    visitor = ...
    entry = entries.get(date, {})
    x = entry.get(address, {})
    x.append(visitor)
    entry[address] = x
    entries[date] = entry



The trick is to use get to look up the dictionary:

entries.get(date, {})

looks up date in entries, and if it isn't found, it returns an empty 
dict {} instead of failing. Similarly for looking up the IP address.



-- 
Steven D'Aprano


More information about the Tutor mailing list