Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialErik Burmeister
Python Web Development Techdegree Graduate 17,108 PointsCould anyone explain String formatting with dictionaries challenge step-by-step?
I've tried a variety of things ranging from following the example in the video to going through many questions about the same challenge asked by other students and answers from other students or mods.
Not sure what I'm missing or just not understanding. I'd really appreciate some help on the matter. After 2 hours of attempts, I think it's time to ask for help.
#Original code below
def favorite_food(dict):
return "Hi, I'm {name} and I love to eat {food}!".format()
#Code used in the video previous to this challenge
def unpacker(first_name=None, last_name=None):
if first_name and last_name:
print("Hi {} {}!".format(first_name, last_name))
else:
print("Hi, no name!")
unpacker(**{"last_name": "Wick", "first_name": "John"})
1 Answer
csr13
33,293 PointsWhenever you use " ".format()
you can unpack a dict by using **
, so you need to unpack (not manually)
the dict to the format()
function.
If you were to unpack the dict manually you would do this:
def favorite_food(dict):
food = dict['food']
name = dict['name']
return "Hi, I'm {} and I love to eat {}!".format(name, food)
But you can also use **
to your benefit to allocate the keys in their reserved placeholders without unpacking a dict manually.
By using **
I think what happens is you are unpacking the dict and passing it as keyword arguments that fit the reserved placeholder, but at the same time creating those named parameters.
This:
def favorite_food(dict):
return "Hi, I'm {name} and I love to eat {food}!".format(**dict)
Is the same as this:
def favorite_food(dict):
return "Hi, I'm {name} and I love to eat {food}!".format(name='yourname', food='yourfood')
If the dict passed to the funcion is like this.
dict_passed_to_function = {'name': 'yourname', 'food': 'yourfood' }
Hope this helps
Erik Burmeister
Python Web Development Techdegree Graduate 17,108 PointsErik Burmeister
Python Web Development Techdegree Graduate 17,108 PointsThank you!!! Really, thank you. I really appreciate that you took time out of your day to help me out. This really cleared things up. I can't believe it was this simple. For some reason, I got it all twisted in my head.