Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Create Dictionary from Text/File that's in Dictionary Format

I'd like to create a dictionary from a text file that I have, who's contents are in a 'dictionary' format. Here's a sample of what the file contains:

{'fawn': [1], 'sermersheim': [3], 'sonji': [2], 'scheuring': [2]}

It's exactly this except it contains 125,000 entries. I am able to read in the text file using read(), but it creates a variable of the literal text of the file even when I initialize the variable with

dict = {}

like image 641
Jared Avatar asked Feb 16 '12 16:02

Jared


People also ask

Can you create a dictionary in a dictionary Python?

In Python, you can create a dictionary dict with curly brackets {} , dict() , and dictionary comprehensions. This article describes the following contents.

Can dictionary values be dictionary Python?

Dictionaries in PythonAlmost any type of value can be used as a dictionary key in Python. You can even use built-in objects like types and functions.


1 Answers

You can use the eval built-in. For example, this would work if each dictionary entry is on a different line:

dicts_from_file = [] with open('myfile.txt','r') as inf:     for line in inf:         dicts_from_file.append(eval(line))     # dicts_from_file now contains the dictionaries created from the text file 

Alternatively, if the file is just one big dictionary (even on multiple lines), you can do this:

with open('myfile.txt','r') as inf:     dict_from_file = eval(inf.read()) 

This is probably the most simple way to do it, but it's not the safest. As others mentioned in their answers, eval has some inherent security risks. The alternative, as mentioned by JBernardo, is to use ast.literal_eval which is much safer than eval since it will only evaluate strings which contain literals. You can simply replace all the calls to eval in the above examples with ast.literal_eval after importing the ast module.

If you're using Python 2.4 you are not going to have the ast module, and you're not going to have with statements. The code will look more like this:

inf = open('myfile.txt','r') dict_from_file = eval(inf.read()) inf.close() 

Don't forget to call inf.close(). The beauty of with statements is they do it for you, even if the code block in the with statement raises an exception.

like image 157
Steven T. Snyder Avatar answered Oct 03 '22 06:10

Steven T. Snyder