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

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

Reply via email to