Written by Elyse Cornwall
map
Around the GlobeYou and your freshman year roommate grew up in different countries. You often have trouble trying to explain the current temperature outside as one of you is familiar with degrees Celsius and the other is used to using degrees Fahrenheit. Fortunately, you're taking 106A and can help!
Given a list of temperatures in degrees Farenheit like so:
temps_f = [45.7, 55.3, 62.1, 75.4, 32.0, 0.0, 100.0]
We're going to use map
to produce a list of those same temperatures,
converted to degrees Celsius. First we'll use map
with a helper function, and then we'll use
map
with a
lambda function. To convert Farenheit to Celsius, you first subtract 32 and then multiply by
5⁄9.
Write a helper function def to_celcius(temp_f)
that takes in a float representing a temperature
in
Fahrenheit temp_f
, and returns that temperature in Celcius. Once you've written your
helper function, write a map
statement to apply this helper function to every item in our list
temps_f
and create a new list temps_c
that contains the temperatures in Celcius.
Now, write a map
statement using a lambda function and create your new temps_c
list this way. Don't use your helper function this time - write all the code inside the map
!
You can write your code in using_map.py
in the PyCharm project, and test it by running
python3 using_map.py
. Hint: If you're running
this and getting something like
map object at 0x7fe8201bddf0
, cast your map
expression to a list like so:
list(map(... ))
.
houses = [('main st.', 4, 4000), ('elm st.', 1, 1200), ('pine st.', 2, 1600)]
Sort the list in the following ways:
A good way to quickly test your code is by running it in the terminal. Open a new terminal and type either
python3
or py
to start the Python interpreter. Then you can enter code line-by-line
and see the results:
$ python3
>>> houses = [('main st.', 4, 4000), ('elm st.', 1, 1200), ('pine st.', 2, 1600)] # define houses list
>>> list(sorted(houses, reverse=True)) # sort in reverse alphabetical order
[('pine st.', 2, 1600), ('main st.', 4, 4000), ('elm st.', 1, 1200)] # see sorted result
Let's take a look at one of the inner nested dictionaries from last week's section, where each key is an item name and each value is how many of that item we need to buy at the store:
counts = {'eggs': 3, 'coconut milk': 6, 'flour': 1, 'M&Ms': 5, 'croissant': 12, 'coffee': 2}
Recall the dictionary functions keys()
and values()
that
return a list of keys or values respectively:
>>> counts.keys()
dict_keys(['eggs', 'coconut milk', 'flour', 'M&Ms', 'croissant', 'coffee'])
>>> counts.values()
dict_values([3, 6, 1, 5, 12, 2])
Write a function reverse_keys(counts)
that prints the items in a
counts
dictionary in reverse alphabetical order (note how uppercase letters come after
lowercase ones, this is just how alphabetical sorting works):
flour
eggs
croissant
coffee
coconut milk
M&Ms
Test your implementation by running python3 groceries_revisited.py -reverse long-list.txt
in
the
terminal.
In Python, there's a dictionary function items()
that
returns a list of key-value tuples:
>>> counts.items()
dict_items([('eggs', 3), ('coconut milk', 6), ('flour', 1), ('M&Ms', 5), ('croissant', 12), ('coffee', 2)])
Now, with help from the items()
function,
implement a function, most_used(counts)
, which given a
counts
dictionary, prints the 5 foods we need the most of with their counts, in order. For
example, most_used(counts)
for the counts
dictionary shown above would print:
croissant 12
coconut milk 6
M&Ms 5
eggs 3
coffee 2
Test your implementation by running python3 groceries_revisited.py -most long-list.txt
in the terminal.