Data Structures Day 3 of 3
Day 9 of 100
More exercises with lists and dictionaries today. Sorting, slicing, mix, matching, you name it. Generally fun to figure out. I don't know the list and dictionary structures well enough to know all the tricks that make the official solution so simple, but again my goal in this is to (1) write code and (2) write code that works. I'll refine and polish later, when I have more tools in my tool belt.
Here are is my challenge code for today with the exercises in the comments for each function:
us_state_abbrev = {'Alabama': 'AL', 'Alaska': 'AK', 'Arizona': 'AZ',
'Arkansas': 'AR', 'California': 'CA', 'Colorado': 'CO',
'Connecticut': 'CT', 'Delaware': 'DE', 'Florida': 'FL',
'Georgia': 'GA', 'Hawaii': 'HI', 'Idaho': 'ID',
'Illinois': 'IL', 'Indiana': 'IN', 'Iowa': 'IA',
'Kansas': 'KS', 'Kentucky': 'KY', 'Louisiana': 'LA',
'Maine': 'ME', 'Maryland': 'MD', 'Massachusetts': 'MA',
'Michigan': 'MI', 'Minnesota': 'MN', 'Mississippi': 'MS',
'Missouri': 'MO', 'Montana': 'MT', 'Nebraska': 'NE',
'Nevada': 'NV', 'New Hampshire': 'NH', 'New Jersey': 'NJ',
'New Mexico': 'NM', 'New York': 'NY',
'North Carolina': 'NC', 'North Dakota': 'ND',
'Ohio': 'OH', 'Oklahoma': 'OK', 'Oregon': 'OR',
'Pennsylvania': 'PA', 'Rhode Island': 'RI',
'South Carolina': 'SC', 'South Dakota': 'SD',
'Tennessee': 'TN', 'Texas': 'TX', 'Utah': 'UT',
'Vermont': 'VT', 'Virginia': 'VA', 'Washington': 'WA',
'West Virginia': 'WV', 'Wisconsin': 'WI', 'Wyoming': 'WY'}
states = ['Oklahoma', 'Kansas', 'North Carolina', 'Georgia', 'Oregon',
'Mississippi', 'Minnesota', 'Colorado', 'Alabama',
'Massachusetts', 'Arizona', 'Connecticut', 'Montana',
'West Virginia', 'Nebraska', 'New York', 'Nevada', 'Idaho',
'New Jersey', 'Missouri', 'South Carolina', 'Pennsylvania',
'Rhode Island', 'New Mexico', 'Alaska', 'New Hampshire',
'Tennessee', 'Washington', 'Indiana', 'Hawaii', 'Kentucky',
'Virginia', 'Ohio', 'Wisconsin', 'Maryland', 'Florida',
'Utah', 'Maine', 'California', 'Vermont', 'Arkansas', 'Wyoming',
'Louisiana', 'North Dakota', 'South Dakota', 'Texas',
'Illinois', 'Iowa', 'Michigan', 'Delaware']
NOT_FOUND = 'N/A'
def get_every_nth_state(states=states, n=10):
"""Return a list with every nth item (default argument n=10, so every
10th item) of the states list above (remember: lists keep order)"""
index = 1
states_list = []
for state in states:
if index % n == 0:
states_list.append(state)
index += 1
return states_list
def get_state_abbrev(state_name, us_state_abbrev=us_state_abbrev):
"""Look up a state abbreviation by querying the us_state_abbrev
dict by full state name, for instance 'Alabama' returns 'AL',
'Illinois' returns 'IL'.
If the state is not in the dict, return 'N/A' which we stored
in the NOT_FOUND constant (takeaway: dicts are great for lookups)"""
if state_name not in us_state_abbrev.keys():
return NOT_FOUND
else:
for key, value in us_state_abbrev.items():
if key == state_name:
return value
def get_longest_state(data):
"""Receives data, which can be the us_state_abbrev dict or the states
list (see above). It returns the longest state measured by the length
of the string"""
longest_state_len = 0
longest_state_name = ''
# process if data is list
if type(data) is list:
for record in data:
if len(record) > longest_state_len:
longest_state_len = len(record)
longest_state_name = record
# process if data is dictionary
if type(data) is dict:
for key in data.keys():
if len(key) > longest_state_len:
longest_state_len = len(key)
longest_state_name = key
return longest_state_name
def combine_state_names_and_abbreviations(us_state_abbrev=us_state_abbrev,
states=states):
"""Get the first 10 state abbreviations ('AL', 'AK', 'AZ', ...) from
the us_state_abbrev dict, and the last 10 states from the states
list (see above) and combine them into a new list. The resulting list
has both sorted, so:
['AK', 'AL', 'AZ', ..., 'South Dakota', 'Tennessee', 'Texas', ...]
(see also test_combine_state_names_and_abbreviations)"""
combined_list = []
index = 0
for keys, values in us_state_abbrev.items():
if index < 10:
combined_list.append(values)
index += 1
combined_list.sort()
states.sort()
for state in states[-10:]:
combined_list.append(state)
return combined_list