#set document(title: "10.3 Dictionary operations", author: "OpenStax / XYZ Homework") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 10.3#h(0.6em)Dictionary operations === Learning objectives By the end of this section you should be able to - Recognize that a dictionary object is mutable. - Evaluate dictionary items, keys, and values. - Demonstrate the ability to access, evaluate, and modify dictionary items. - Modify a dictionary by adding items. - Modify a dictionary by removing items. === Accessing dictionary items In Python, values associated with keys in a dictionary can be accessed using the keys as indexes. Here are two ways to access dictionary items in Python: - Square bracket notation: Square brackets \[\] with the key inside access the value associated with that key. If the key is not found, an exception will be thrown. - get() method: The get() method is called with the key as an argument to access the value associated with that key. If the key is not found, the method returns None by default, or a default value specified as the second argument. Ex: In the code below, a dictionary object my\_dict is initialized with items {"apple": 2, "banana": 3, "orange": 4}. The square bracket notation and get() method are used to access values associated with the keys "banana" and "apple", respectively. When accessing the dictionary to obtain the key "pineapple", -1 is returned since the key does not exist in the dictionary. my\_dict = {"apple": 2, "banana": 3, "orange": 4} print(my\_dict\["banana"\]) \# Prints: 3 print(my\_dict.get("apple")) \# Prints: 2 print(my\_dict.get("pineapple", -1)) \# Prints: -1 #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Accessing dictionary items] #link("https://www.openstax.org/r/accessing-dictionary")[Accessing dictionary items; ch 10, video 5] ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Dictionary items] Given the dictionary members = {"Jaya": "Student", "John": "TA", "Ksenia": "Staff"}, answer the following questions. ] === Obtaining dictionary keys and values Dictionary keys, values, and both keys and values can be obtained using keys(), values(), and items() function calls, respectively. The return type of keys(), values(), and items() are dict\_keys, dict\_values, and dict\_items, which can be converted to a list object using the list constructor list(). #examplebox("Example 1")[String template formatting for course enrollment requests][ A dictionary object with items {"a": 97, "b": 98, "c": 99} is created. Functions keys(), values(), and items() are called to obtain keys, values, and items in the dictionary, respectively. list() is also used to convert the output to a list object. dictionary\_object = {"a": 97, "b": 98, "c": 99} print(dictionary\_object.keys()) print(list(dictionary\_object.keys())) print(dictionary\_object.values()) print(dictionary\_object.items()) The above code's output is: dict\_keys(\["a", "b", "c"\]) \["a", "b", "c"\] dict\_values(\[97, 98, 99\]) dict\_items(\[("a", 97), ("b", 98), ("c", 99)\]) ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Dictionary keys and values] Given the dictionary numbers = {"one": 1, "two": 2, "three": 3}, answer the following questions. ] === Dictionary mutability In Python, a dictionary is a mutable data type, which means that a dictionary's content can be modified after creation. Dictionary items can be added, updated, or deleted from a dictionary after a dictionary object is created. To add an item to a dictionary, either the square bracket notation or update() function can be used. - Square bracket notation: When using square brackets to create a new key object and assign a value to the key, the new key-value pair will be added to the dictionary. my\_dict = {"apple": 2, "banana": 3, "orange": 4} my\_dict\["pineapple"\] = 1 print(my\_dict) \# Prints: {"apple": 2, "banana": 3, "orange": 4, "pineapple": 1} - update() method: the update() method can be called with additional key-value pairs to update the dictionary content. my\_dict = {"apple": 2, "banana": 3, "orange": 4} my\_dict.update({"pineapple": 1, "cherry": 0}) print(my\_dict) \# Prints: {"apple": 2, "banana": 3, "orange": 4, "pineapple": 1, "cherry": 0} To modify a dictionary item, the two approaches above can be used on an existing dictionary key along with the updated value. Ex: - Square bracket notation: my\_dict = {"apple": 2, "banana": 3, "orange": 4} my\_dict\["apple"\] = 1 print(my\_dict) \# Prints: {"apple": 1, "banana": 3, "orange": 4} - update() method: my\_dict = {"apple": 2, "banana": 3, "orange": 4} my\_dict.update({"apple": 1}) print(my\_dict) \# Prints: {"apple": 1, "banana": 3, "orange": 4} Items can be deleted from a dictionary using the del keyword or the pop() method. - del keyword: my\_dict = {"apple": 2, "banana": 3, "orange": 4} del my\_dict\["orange"\] print(my\_dict) \# Prints: {"apple": 2, "banana": 3} - pop() method: my\_dict = {"apple": 2, "banana": 3, "orange": 4} deleted\_value = my\_dict.pop("banana") print(deleted\_value) \# Prints: 3 print(my\_dict) \# Output: {"apple": 2, "orange": 4} #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Modifying dictionary items] #link("https://www.openstax.org/r/modifying-dictionary")[Modifying dictionary items; ch 10, video 7] ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Modifying a dictionary] Given the dictionary food = {"Coconut soup": "\$15", "Butter Chicken": "\$18", "Kabob": "\$20"}, answer the following questions. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Create a dictionary of cars step-by-step] Follow the steps below to create a dictionary of cars and modify it step-by-step. + Create an empty dictionary. + Add a key-value pair of "Mustang": 10. + Add another key-value pair of "Volt": 3. + Print the dictionary. + Modify the value associated with key "Mustang" to be equal to 2. + Delete key "Volt" and the associated value. + Print the dictionary content. Prints {"Mustang": 2} \# 1. Create an empty dictionary. \# 2. Add a key-value pair of "Mustang": 10. \# 3. Add another key-value pair of "Volt": 3. \# 4. Modify the value associated with key "Mustang" to be equal to 2. \# 5. Delete key "Volt" and the associated value. \# 6. Print the dictionary ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[The number of unique characters] Given a string value, calculate and print the number of unique characters using a dictionary. Input: string\_value = "This is a string" Prints 10 string\_value = "This is a string" \# Create a dictionary and count the number of unique characters in string\_value ]