{ "cells": [ { "cell_type": "markdown", "id": "8b7f2e13", "metadata": {}, "source": [ "## Nesting Dictionaries\n", "\n", "Given a file named \"grades.csv\" that has the contents\n", "\n", "```\n", "name, grade1, grade2, …\n", "ali, 67, 82, …\n", "cady, 94, 98, …\n", "tiernan, 83, 96, …\n", "```\n", "\n", "Write a function that returns a dictionary whose keys are strings (names), and values are a list of that person's grades. There may be any number of grades.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "005c74e8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'ali': [67, 82], 'cady': [94, 98], 'tiernan': [83, 96]}\n" ] } ], "source": [ "grades = {}\n", "with open('grades.csv') as file:\n", " lines = file.readlines()\n", " for line in lines[1:]:\n", " line = line.strip()\n", " parts = line.split(', ')\n", "\n", " name = parts[0]\n", " grades[name] = []\n", " \n", " for grade in parts[1:]:\n", " grade = int(grade)\n", " grades[name].append(grade)\n", "\n", "print(grades)" ] }, { "cell_type": "code", "execution_count": null, "id": "f9743cc7", "metadata": {}, "outputs": [], "source": [ "{'ali': {'Homework 1': 67, 'Quiz 2': 82}, 'cady': [94, 98], 'tiernan': [83, 96]}" ] }, { "cell_type": "code", "execution_count": null, "id": "7c2c9a74", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['name', 'Homework 1', 'Quiz 2']\n", "0\n", "67\n", "Homework 1\n", "1\n", "82\n", "Quiz 2\n", "0\n", "94\n", "Homework 1\n", "1\n", "98\n", "Quiz 2\n", "0\n", "83\n", "Homework 1\n", "1\n", "96\n", "Quiz 2\n", "{'ali': {'Homework 1': 67, 'Quiz 2': 82}, 'cady': {'Homework 1': 94, 'Quiz 2': 98}, 'tiernan': {'Homework 1': 83, 'Quiz 2': 96}}\n" ] } ], "source": [ "grades = {}\n", "with open('grades.csv') as file:\n", " lines = file.readlines()\n", " labels = lines[0].strip().split(', ')\n", " print(labels)\n", "\n", " for line in lines[1:]:\n", " line = line.strip()\n", " parts = line.split(', ')\n", "\n", " name = parts[0]\n", " grades[name] = {}\n", " \n", " for grade_index in range(len(parts[1:])):\n", " print(grade_index)\n", " grade = int(parts[grade_index + 1])\n", " print(grade)\n", " # grades[name].append(grade)\n", "\n", " label = labels[grade_index + 1]\n", " print(label)\n", " grades[name][label] = grade\n", "\n", "print(grades)" ] }, { "cell_type": "code", "execution_count": null, "id": "82d7d8c6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'name': 'ali', ' Homework 1': ' 67', ' Quiz 2': ' 82'}\n", "{'name': 'cady', ' Homework 1': ' 94', ' Quiz 2': ' 98'}\n", "{'name': 'tiernan', ' Homework 1': ' 83', ' Quiz 2': ' 96'}\n", "{'ali': {' Homework 1': ' 67', ' Quiz 2': ' 82'}, 'cady': {' Homework 1': ' 94', ' Quiz 2': ' 98'}, 'tiernan': {' Homework 1': ' 83', ' Quiz 2': ' 96'}}\n" ] } ], "source": [ "import csv\n", "\n", "grades = {}\n", "with open('grades.csv') as file:\n", " csv_reader = csv.DictReader(file)\n", " for line in csv_reader:\n", " print(line)\n", "\n", " name = line['name']\n", " del line['name']\n", " grades[name] = line\n", "\n", "print(grades)" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }