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

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to