osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How Do You Replace Variables With Their Values?


On 2019-07-11 12:43 AM, CrazyVideoGamez wrote:
> How do you replace a variable with its value in python 3.7.2? For example, say I have:
> 
> dinner = {'Starters':['Fried Calamari', 'Potted crab'],'Main Course':['Fish', 'Meat'], 'Desert':['Cake', 'Banana Split']}
> 
> # Don't ask where I got the dinner from
> 
> for meal in dinner.keys():
>          meal = list(dinner[meal])
> 
> But I only get one list called "meal" and I'm just changing it with the code above (you can find that by printing it out). How can I make separate lists called 'Starters', 'Main Course', and 'Desert'?
> 

1. Iterating over a dictionary returns each key. So instead of 'for meal 
in dinner.keys()' you can just say 'for meal in dinner'.

2. It is not a good idea to use the variable name 'meal' for two 
purposes. You use it to get each key, and then it gets over-ridden with 
the result of 'list(dinner[meal])'. Then on the next iteration it gets 
over-ridden again with the next key.

3. The result of 'dinner[meal]' is already a list, so there is no need 
to say 'list(dinner[meal])'. Technically there is a difference - your 
approach creates a new list, instead of just creating a reference to the 
original one, but I doubt if that was your intention.

4. There is potentially more than one list, but for each iteration you 
over-ride the previous one, so at the end, only the last one remains. 
The solution is to create a 'list of lists'.

Putting all this together -

     courses = []
     for course in dinner:
         courses.append(dinner[course])

This gives you a list, called 'courses', containing three lists, one for 
each 'course' containing the options for that course.

However, in the process, you have lost the names of the courses, namely 
'Starters', 'Main course', and 'Desert'.

So to answer your original question "How can I make separate lists 
called 'Starters', 'Main Course', and 'Desert'?", the code that you 
started with is exactly what you asked for.

I think you were asking how to create a variable called 'Starters' 
containing the list of starters. It can be done, using the built-in 
function 'setattr()', but I don't think that would be useful. If you 
knew in advance that one of the options was called 'Starters', you could 
just say Starters = ['Fried Calamari', 'Potted crab']. But if you did 
not know that in advance, how would you know what your variable was called?

Frank Millman