Python Forum

Full Version: variable as dictionary name?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi I am attempting to create 10 dictionaries without having to code them explicitly.
The names of the dictionaries will be: X0, X1, X2, X3 .... X9

for x in range(11):
		a = str(x)
		dictionary_name = ('X'+a)
		dictionary_name = {}

        
if i add type(dictionary_name) to the code it returns 'dict' However if i try to print one of the dictionaries print (dictionary_name) i get


Error:
NameError: name 'X0' is not defined
No, you don't dynamically create variables like that. If you want a collection of things, use a collection - you can have a list of dictionaries of course.

Of course your code does that. On line 4, you set the value of dictionary_name to an empty dict, overwriting what was in there before. Line 3 doesn't even create a variable with the name X0 for example - it just sets the value of the variable to be that string. Both lines 3 and 4 are doing the same kind of thing - assigning a value to a variable. How could the same syntax be used for that and creating variable names dynamically? It couldn't, because the interpreter wouldn't be able to guess which one you meant.
So what would you recommend as is the simplest way to achieve this?
Create a list of dictionaries.

The other reason for using a collection rather than individual variables is that the latter is harder to work with. For a start, you have to change the program if you need more of them tomorrow than you did today.
Or a dictionary of dictionaries.
dictionaries = {}
for d in range(10):
    dictionaries['X'+str(d)] = {}
This is really strange looking code, but it does create ten dictionaries with the variables named 'X0' through 'X9'.

If the dictionaries are part of a class, you could add the new dictionaries to the instance dictionary.
class LotsaDictionaries:
    def __init__(self, count):
        for d in count:
            setattr(self, 'X'+str(d), {})

tenDictionaries = LotsaDictionaries(10)
tenDictionaries.X0['whatever'] = 5