CSE 160 Section 6
Nested Structures!
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 list 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
Written Check In
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