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 = {}
You can use the
evalbuilt-in. For example, this would work if each dictionary entry is on a different line:Alternatively, if the file is just one big dictionary (even on multiple lines), you can do this:
This is probably the most simple way to do it, but it’s not the safest. As others mentioned in their answers,
evalhas some inherent security risks. The alternative, as mentioned by JBernardo, is to useast.literal_evalwhich is much safer than eval since it will only evaluate strings which contain literals. You can simply replace all the calls toevalin the above examples withast.literal_evalafter importing theastmodule.If you’re using Python 2.4 you are not going to have the
astmodule, and you’re not going to havewithstatements. The code will look more like this:Don’t forget to call
inf.close(). The beauty ofwithstatements is they do it for you, even if the code block in thewithstatement raises an exception.