trouble building data structure

Ned Batchelder ned at nedbatchelder.com
Mon Sep 29 02:21:30 CEST 2014


On 9/28/14 8:04 PM, David Alban wrote:
> i'm writing a program to scan a data file.  from each line of the data
> file i'd like to add something like below to a dictionary.  my perl
> background makes me want python to autovivify, but when i do:
>
>        file_data = {}
>
>        [... as i loop through lines in the file ...]
>
>            file_data[ md5sum ][ inode ] = { 'path' : path, 'size' : size, }
>
> i get:
>
> Traceback (most recent call last):
>    File "foo.py", line 45, in <module>
>      file_data[ md5sum ][ inode ] = { 'path' : path, 'size' : size, }
> KeyError: '91b152ce64af8af91dfe275575a20489'
>
> what is the pythonic way to build my "file_data" data structure above
> that has the above structure?
>

If you want file_data to be a dictionary of dictionaries, use a defaultdict:

     file_data = collections.defaultdict(dict)

This is Python's version of autovivification.  When you access a key 
that doesn't exist, the defaultdict will use the callable you gave it 
(in this case, dict) to create the new value as needed.

-- 
Ned Batchelder, http://nedbatchelder.com




More information about the Python-list mailing list