Section 6
Nested Structures
QOTD: What song would you pick as the soundtrack to your life?
CSE 160
CSE 160: Nested Structure
Logistics
CSE 160: Nested Structure
Lecture Review: Nested Structures
CSE 160: Nested Structure
Review of nested structures
Nested Structure | Example |
List of lists | Pixel grids |
Dictionaries with lists as values | centroids_dict |
List of dictionaries | Excel data with column headers |
Dictionary of dictionaries | Excel data with row and column headers |
CSE 160: Nested Structure
Review of nested structures
CSE 160: Nested Structure
Nested Lists
255 | 0 | 255 |
0 | 0 | 255 |
255 | 255 | 255 |
| | |
| | |
| | |
CSE 160: Nested Structure
Dictionary with Lists as Values
{"p1": [10.0, 10.5, 9.9], "p2": [8.0, 9.5, 9.2], "p3": [8.0, 8.2, 10.1]}
CSE 160: Nested Structure
Lists of Dictionaries
CSE 160: Nested Structure
Nested Dictionaries
CSE 160: Nested Structure
How would we represent this data in python?
| | |
| | |
| | |
CSE 160: Nested Structure
Section Handout Problems
CSE 160: Nested Structure
Problem 1
1. Write a function called sum_lists(dict_list) that when given a dictionary with lists as values returns a list that is the sum of all the lists for each index. Assume that all of the lists are of the same length.
Hint: You can find the length of the list by using len(dict_list["list_1"]).
Example:.
{"list_1" : [5, 10, 90],
"list_2" : [45, 78, 0],
"list_3" : [90, 0, 10]}
Should return:
[140, 88, 100] => Because 5 + 45 + 90 = 140 and so on
CSE 160: Nested Structure
Problem Breakdown
CSE 160: Nested Structure
Problem 1
def sum_lists(dict_list):
output_list = []
for i in range(len(dict_list["list_1"])):
total = 0
for list in dict_list.values():
total += list[i]
output_list.append(total)
return output_list
CSE 160: Nested Structure
Problem 2
Write a function called sum_dict(nested_dict) that, given a dictionary of dictionaries, creates a single dictionary containing the sums of values with the same key in the given dictionaries.
For example: Given this dictionary of dictionaries:
{"dict_1" : {"b": 10, "a": 5, "c": 90},
"dict_2" : {"b": 78, "a": 45},
"dict_3" : {"a": 90, "c": 10}}
Your code should create : {"b": 88, "a": 140, "c": 100}
CSE 160: Nested Structure
Problem 2
def sum_dict(nested_dict):
new_dict = {}
for inner_dict in nested_dict.values():
for key in inner_dict:
if key not in new_dict:
new_dict[key] = 0
new_dict[key] += inner_dict[key]
return new_dict
CSE 160: Nested Structure
Problem 3
Write a function called reformat_dict(dict_list, new_key) that when given a list of dictionaries and a key returns a dictionary of dictionaries with the keys being the value of the given key for each dictionary and the value being a dictionary with the rest of the information.
For example, given: key = "County"
dict_list = [{"County": "King", "Population": 2269675, "Temperature": 57},{"County": "Pierce", "Population": 921130, "Temperature": 61},{"County": "Snohomish", "Population": 827957, "Temperature": 53}]
Your code should produce:
{‘King’ : {‘Population’ : 2269675, ‘Temperature’ : 57}, ‘Pierce’ : {‘Population’ : 921130 , ‘Temperature’ : 61}, ‘Snohomish’ : {‘Population’ : 827957 , "Temperature" : 53}}
CSE 160: Nested Structure
Problem 3
def reformat_dict(dict_list, new_key):
new_dict = {}
for inner_dict in dict_list:
current_key = inner_dict[new_key]
new_dict[current_key] = {}
for key in inner_dict:
if key != new_key:
new_dict[current_key][key] = inner_dict[key]
return new_dict
CSE 160: Nested Structure
Additional Problems
CSE 160: Nested Structure
Problem 4
Given a file.txt that looks like the following, write a function called read_data(file_name) that reads the data and outputs a list of dictionaries, where the first row of file_name contains the keys and the subsequent rows of file_name are the values of each dictionary. You may assume that the format will exactly follow the example below, with spaces in between each word/number.
example.txt:
state city zip
Washington Seattle 733919
Oregon Portland 641162
California San-Francisco 815201
Michigan Detroit 632464
Example Output:
[{"state": "Washington", "city": "Seattle", "zip": "733919"},
{"state": "Oregon", "city": "Portland", "zip": "641162"},
{"state": "California", "city": "San-Francisco", "zip": "815201"},
{"state": "Michigan", "city": "Detroit", "zip": "632464"}]
CSE 160: Nested Structure
Problem 4
def read_data(file_name):
nested_dict = {}
file = open(example.txt)
for line in file:
data = line.split()
inner_dict = {}
inner_dict[data[1]] = data[2]
nested_dict[data[0]] = inner_dict
file.close()
return nested_dict
CSE 160: Nested Structure
Example 2: Structured Strings
22
Instead of analyzing DNA (A, T, C, G) sequences like in HW2, now you are given an RNA (A, U, C, G) sequence as an input string. Each sequence of three nucleotides could translate to an amino acid.
"AUG" - "Methionine"
"UGC" - "Crysteine"
"UCU" - "Serine"
Use a for loop, range, and string slicing to "translate" an RNA sequence to amino acids.
Your Task
"AUGCUCAUG"
["Methionine", "Methionine"]
"ACCUUUAUGAUUUGCUCUUUUUGCUCU"
["Methionine", "Crysteine", "Serine", "Crysteine", "Serine"]
CSE 160: Nested Structres
Example 2: Structured Strings
23
Instead of analyzing DNA (A, T, C, G) sequences like in HW2, now you are given an RNA (A, U, C, G) sequence as an input string. Each sequence of three nucleotides could translate to an amino acid.
Use a for loop, range, and string slicing to "translate" an RNA sequence to amino acids.
Your Task
"AUGCUCAUG"
["Methionine", "Methionine"]
"ACCUUUAUGAUUUGCUCUUUUUGCUCU"
["Methionine", "Crysteine", "Serine", "Crysteine", "Serine"]
1. Understand Inputs → Outputs
TAKEAWAY: Move in steps of 3
"AUG" - "Methionine"
"UGC" - "Crysteine"
"UCU" - "Serine"
CSE 160: Nested Structres
Example 2: Structured Strings (Subproblem 1)
24
Instead of analyzing DNA (A, T, C, G) sequences like in HW2, now you are given an RNA (A, U, C, G) sequence as an input string. Each sequence of three nucleotides could translate to an amino acid.
"AUG" - "Methionine"
"UGC" - "Crysteine"
"UCU" - "Serine"
"AUGCUCAUG"
["Methionine", "Methionine"]
2. Subproblem 1:
RNA sequence to amino acid
Use a for loop, range, and string slicing to "translate" an RNA sequence to amino acids.
Your Task
CSE 160: Nested Structres
Example 2: Structured Strings (Subproblem 2)
25
Instead of analyzing DNA (A, T, C, G) sequences like in HW2, now you are given an RNA (A, U, C, G) sequence as an input string. Each sequence of three nucleotides could translate to an amino acid.
"AUG" - "Methionine"
"UGC" - "Crysteine"
"UCU" - "Serine"
"AUGCUCAUG"
["Methionine", "Methionine"]
2. Subproblem 1:
RNA sequence to amino acid
Use a for loop, range, and string slicing to "translate" an RNA sequence to amino acids.
Your Task
3. Subproblem 2:
Iterate over RNA in steps of 3
TAKEAWAY: Move in steps of 3
CSE 160: Nested Structres
Written Check In #6 Due Tomorrow
CSE 160: Nested Structure