1 of 22

CSE 160 Section 6

Nested Structures!

CSE 160: Nested Structure

​

2 of 22

Logistics

  • Written check-in 6 due Fri Feb 13!
  • Programming practice 6 due Wed, Feb 18!
  • HW4 due Thu Feb 26
    • Submitting on Gradescope
    • Wait for autograder!

​

​

​

CSE 160: Nested Structure

​

3 of 22

Lecture Review: Nested Structures

CSE 160: Nested Structure

​

4 of 22

Review of nested structures

  • So far you have seen lists and dictionaries.
  • There are ways to combine them into nested structures in order to represent different types of data.

​

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

​

5 of 22

Review of nested structures

  • Why do we care about nested structures?
    • A lot of the data that we work with in real life come in tables, which cannot be represented by a single list or dictionary

​

CSE 160: Nested Structure

​

6 of 22

Nested Lists

  • Useful for representing data in which only the order matters.
  • Can be multidimensional.
  • Used in HW 3 for image data (how would you represent color images?)

​

255

0

255

0

0

255

255

255

255

​

​

​

​

​

​

​

​

​

CSE 160: Nested Structure

​

7 of 22

Dictionary with Lists as Values

  • In homework 4, these will be used to hold centroids and the points associated with them.
  • Can also be used to represent multiple observations for each data point.
    • Example: Race times were measured three times for three different people

{"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

​

8 of 22

Lists of Dictionaries

  • List of dictionaries:
    • [{‘a’ : 1, ‘b’ : 2, ‘c’ : 3}, {‘a’ : 4, ‘b’ : 5, ‘c’ : 6}, {‘d’ : 1, ‘e’ : 2, ‘f’ : 3}]
  • They might be used to represent a table (e.g. an excel file)
    • Where each item in the list in the dictionary is a row in the table
    • In this version, each dictionary should have the same keys 
  • Example:
    • [{‘County’ : ‘King’, ‘Population’ : 2269675, "Temperature" : 57}, {‘County’ : ‘Pierce’, ‘Population’ : 921130, "Temperature" : 61}, {‘County’ : ‘Snohomish’, ‘Population’ : 827957, "Temperature" : 53}]

CSE 160: Nested Structure

​

9 of 22

Nested Dictionaries

  • Dictionaries themselves can hold mutable elements as values which means we can put a dictionary inside a dictionary

​

    • {"dict_1" : {"a" : 1, "b" : 2, "c" : 3}, "dict_2" : {"a" : 5, "b" : 4, "c" : 3}, "dict_3" : {"a" : 1, "b" : 2, "c" : 3}}
    • Can have duplicate values

​

  • This can be used to better categorize data, transforming the list of dictionaries

​

    • {‘King’ : {‘Population’ : 2269675, ‘Temperature’ : 57}, ‘Pierce’ : {‘Population’ : 921130 , ‘Temperature’ : 61}, ‘Snohomish’ : {‘Population’ : 827957 , "Temperature" : 53}}

​

    • Can now easily find information based on county instead of traversing through a list

​

CSE 160: Nested Structure

​

10 of 22

How would we represent this data in python?

​

​

​

​

​

​

​

​

​

CSE 160: Nested Structure

​

11 of 22

Section Handout Problems

CSE 160: Nested Structure

​

12 of 22

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

​

13 of 22

Problem Breakdown

  • Identify Problem & create function

​

  • The function starts by creating an empty list to store the final summed values

​

  • The outer loop runs once for each index in the lists, using the length of "list_1"

​

  • A total variable is reset to zero at the start of each index iteration

​

  • The inner loop goes through every list stored in the dictionary’s values

​

  • Each list adds its value at the current index to total

​

  • After summing all lists for that index, the result is appended to output_list and returned at the end!

CSE 160: Nested Structure

​

14 of 22

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

​

15 of 22

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

​

16 of 22

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

​

17 of 22

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

​

18 of 22

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

​

19 of 22

Written Check In

CSE 160: Nested Structure

​

20 of 22

Additional Problems

CSE 160: Nested Structure

​

21 of 22

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

​

22 of 22

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

​