Python dictionaries (dict): A guide with examples

Dictionary (dict) plays an essential role in Python. Unlike list, dictionary stores data in a key -> value format.

In this article, we’ll dive deep into how to use this collection in your programs with illustrative examples.

Похожее
The map::find in C++: Efficiently Locating Elements
C++ boasts a rich collection of libraries, and the map container is among its gems. A key function within this container is map::find, which is essential for locating elements swiftly. In this article, we'll dive into the purpose of this function, explore its mechanics, and run through a practical example.
go

What is a dictionary

A dictionary is a collection that stores items in a "key": "value" format, also known as an associative array. It’s similar in use to lists, but there are some differences:

  1. Anything can be a key: from a simple string to complex objects.
  2. In newer versions of Python (>= 3.7), items are stored in the order they were added.
Dictionary dict illustration

How to create a dictionary

To create a dictionary, we can use curly braces:

ages = {"Yura": 18, "Masha": 22, "Pasha": 30}

print(ages)

Output:

{'Yura': 18, 'Masha': 22, 'Pasha': 30}

There’s a second method: we can use the dict constructor:

translations = dict(hello="hello", world="world")

print(translations)

Output:

{'hello': 'hello', 'world': 'world'}

In Python, you can also use the dict constructor to create a dictionary from a list of key-value pairs:

translations = dict([
  ["hello", "hello"],
  ["world", "world"]
])

print(translations)

Output:

{'hello': 'hello', 'world': 'world'}

It’s worth noting that Python doesn’t allow having multiple items with the same key in a dictionary:

letters = {
  "A": 1,
  "A": 2,
}

print(letters)

Output:

{'A': 2}

As you can see, "A": 2 overwrote "A": 1.

What will be printed on the screen?

dictionary = dict([
    ["apple", "apple"],
    ["orange", "orange"],
    ["apple", "apple-fruit"]
])

print(dictionary)
{"apple": "apple", "orange": "orange"}
{"apple": "apple-fruit", "orange": "orange"}
{"apple": "apple-fruit", "orange": "orange"}
{"apple": "apple", "orange": "orange", "apple": "apple-fruit"}

List of dictionaries

Since a dict dictionary is just a value in Python, we can store dictionaries within other collections. For instance, we can create a list of dictionaries:

dictionaries = [
  {"hello": "hello", "world": "world"},
  {"A": 1, "B": 2, "C": 3},
]

print(dictionaries)

Output:

[{'hello': 'hello', 'world': 'world'}, {'A': 1, 'B': 2, 'C': 3}]
Похожее
vector::size in C++ (With Examples)
In C++, the std::vector container is a dynamic array that can resize itself automatically. A common need is to determine how many elements a vector currently holds. Enter the size function! This article will break down how the size function works, show you some practical examples, and give insights into related features of vectors.
go

Fetching an item from the dictionary

To get the value of an item from a dictionary by its key, we can use square brackets just like with lists:

letters = {"A": 1, "B": 2, "C": 3}

print(letters["B"]) # 2
print(letters["C"]) # 3

However, if we try to access a non-existing key, we’ll get an error:

empty_dict = {}

print(empty_dict["no key"])

Error:

Traceback (most recent call last):
  ...
KeyError: 'no key'

To avoid an error when accessing a non-existing key, we can use the dict.get() method:

names = {"Андрей": "Andrew", "Макс": "Max"}

print("Дима:", names.get("Дима"))

Output:

Дима: None

As you can see, the get() method returned None because there’s no “Дима” in the dictionary.

Dictionary length

To find out how many items are in a dictionary, just use the len() function:

letters = {"A": 1, "B": 2, "C": 3}
print("number of letters:", len(letters))

The output you’ll get:

number of letters: 3

Adding an item to a dictionary

If you want to add a new item to a dictionary (or change an old one), just use the equal sign:

lang = {"C++": "static", "Rascal": "unknown"}

lang["Python"] = "dynamic"
lang["Rascal"] = "hybrid"

print(lang)

Here’s what you’ll see:

{'C++': 'static', 'Rascal': 'hybrid', 'Python': 'dynamic'}

What’s gonna show up on the screen?

fruits = {"apple": "red", "banana": "yellow"}

fruits["mango"] = "yellow"
fruits["banana"] = "green"

print(fruits)
{'apple': 'red', 'banana': 'yellow', 'mango': 'yellow'}
{'apple': 'red', 'banana': 'green', 'mango': 'green'}
{'apple': 'red', 'banana': 'green', 'mango': 'yellow'}
{'apple': 'red', 'banana': 'yellow'}

If you’re in the mood to add or change multiple items at once, you can use the dict.update() method:

lang = {"C++": "static", "Rascal": "unknown"}

lang.update(Python="dynamic", Rascal="hybrid")

print(lang)

Guess what? The output is the same as before:

{'C++': 'static', 'Rascal': 'hybrid', 'Python': 'dynamic'}

You can use another dictionary as an argument for the update method if you want.

There’s also this cool method that lets you add an item to a dictionary only if that key isn’t there already:

first_seen = {"Dima": "yesterday"}

first_seen.setdefault("Dima", "today")
first_seen.setdefault("Masha", "today")

print(first_seen)

Check it out:

{'Dima': 'yesterday', 'Masha': 'today'}

As you can see, setdefault added “Masha” without messing with “Dima”.

Похожее
vector::push_back in C++: Adding Elements to a Vector
C++ offers various ways to manipulate data. The push_back function is a popular way to add elements to a vector. In this article, we'll delve deep into this function, exploring how and when to use it, and discuss some intriguing aspects related to it.
go

Removing an item from a dictionary

Python’s got a bunch of ways to kick items out of a dictionary.

The easiest one? Just use the del keyword:

population = {"Moscow": 12_000_000, "Abracadabra": 0}

del population["Abracadabra"]

print(population)

Here’s what you’ll get:

{'Moscow': 12000000}

But dictionaries also have this special pop method you can use instead of del:

population = {"Moscow": 12_000_000, "Abracadabra": 0}

value = population.pop("Abracadabra")

print(value)
print(population)

The output will look like:

0
{'Moscow': 12000000}

The pop() method is pretty smart. If it can’t find a key, it’ll just return a default value:

empty = {}
print(empty.pop("key", "default value")) # output: default value

If you’re feeling like removing all items from a dictionary, just go with the dict.clear() method:

letters = {"A": 1, "B": 2}
letters.clear()
print(letters)

Output:

{}

The dict.popitem() method removes the last item you added to the dictionary:

letters = {"B": 2}
letters["A"] = 1
letter = letters.popitem()

print("kicked out:", letter)
print("leftovers:", letters)

Output:

kicked out: ('A', 1)
leftovers: {'B': 2}

Just a heads up, before Python 3.7, popitem would randomly pick an item to remove.

Iterating over dictionary elements

The for loop allows us to iterate through all the keys in a dictionary:

students = {"Kate": 20, "John": 30, "Mark": 40}
for name in students:
    print(name, students[name])

Output:

Kate 20
John 30
Mark 40

dict.keys() method

The keys() method provides all the keys stored in a dictionary:

students = {"Kate": 20, "John": 30, "Mark": 40}
for name in students.keys():
    print(name)

Output:

Kate
John
Mark

By default, the for loop iterates over the dictionary’s keys.

Похожее
vector::erase in C++ (With Examples)
C++ offers several ways to manage elements in its containers. The erase function is a popular way to remove elements from the vector. In this article, we'll dive deep into using this function, understand its intricacies, and look at practical examples.
go

dict.values() method

To get values instead of keys, use the values() method:

students = {"Kate": 20, "John": 30, "Mark": 40}
for age in students.values():
    print(age)

Output:

20
30
40

dict.items() method

Often, it’s convenient to get both the key and its corresponding value when iterating over a dictionary. This is where the items() method comes in handy:

students = {"Kate": 20, "John": 30, "Mark": 40}
for name, age in students.items():
    print(name, age)

Output:

Kate 20
John 30
Mark 40

Dictionary within a dictionary

Nested dictionaries

Since dictionaries in Python can hold any values, there’s nothing stopping us from creating a dictionary of dictionaries:

game = {
    "left": {
        "left": "empty",
        "right": "prize!",
    },
    "right": {
        "left": "empty",
        "right": "consolation prize",
    },
}

print(game["left"]["right"])  # prize!
print(game["right"]["right"]) # consolation prize

As you can see, working with nested dictionaries is no different than working with regular ones.

Похожее
string::substr in C++: Extracting Parts of Strings
C++ offers various methods to work with strings. Among them, the substr function stands out as a way to extract specific portions of a string. In this article, we'll dive into the substr function, see how it works, and explore its numerous applications.
go

Checking for a key in a dictionary

Often, there’s a need to execute code depending on whether a particular key exists in the dictionary. The in keyword lets you do just that:

country = {"name": "France", "population": 67_000_000}
if "name" in country:
    print("Country:", country["name"])
else:
    print("Nameless country")

Output:

Country: France

How to copy a dictionary

Python has a special method for copying dictionaries - copy():

original = {"A": 1, "B": 2}
copy = original.copy()
copy["C"] = 3

print("original:", original)
print("copy:    ", copy)

Output:

original: {'A': 1, 'B': 2}
copy:     {'A': 1, 'B': 2, 'C': 3}

If for some reason you don’t want to use the copy() method, you can create a new dictionary using the dict constructor:

original = {"A": 1, "B": 2}

copy = dict(original) # using the constructor instead of the copy method

copy["C"] = 3

print("original:", original)
print("copy:    ", copy)

The output remains the same:

original: {'A': 1, 'B': 2}
copy:     {'A': 1, 'B': 2, 'C': 3}

Dictionary comprehension

Python lets you create dictionaries from existing data using comprehension syntax:

sqr = {x: x * x for x in range(1, 4)}

print(sqr)

Output:

{1: 1, 2: 4, 3: 9}

Just like with list comprehension, you can throw in an if to filter out certain dictionary elements:

sqr = {x: x * x for x in range(1, 8) if x % 2 == 0}

print(sqr)

Output:

{2: 4, 4: 16, 6: 36}

What’s the output of this Python code?

items = {"a": 1, "b": 2, "c": 3}
doubled = {k: v * 2 for k, v in items.items() if v % 2 != 0}

print(doubled)
{"a": 2, "b": 4, "c": 6}
{"a": 2, "c": 6}
{"b": 4, "c": 6}
{"a": 1, "b": 4, "c": 6}
Похожее
puts in C/C++: display string
The puts function is used in the C programming language to display strings on the screen using standard output. In this article, we'll explore examples of this function in action. We'll also create our own version of the function, and at the end, there are exercises for further practice.
go

Using the type() function for dictionaries

If you’re need to find out if a variable’s holding a dictionary, just use the type() function:

number = 1
d = {1: 2, 2: 3}

print("Is number a dict?", type(number) == dict)
print("Is d a dict?    ", type(d) == dict)

Output:

Is number a dict? False
Is d a dict?      True

Exercises

  1. Creating a basic dictionary:
    Write a Python program that lets users store key -> value pairs in a dictionary. Once the user’s done typing, show them the whole dictionary.
  2. Key search:
    Make a feature that lets users type in a key and the program displays the corresponding value from the dictionary.
  3. Adding and removing elements:
    Change your program so users can add new key -> value pairs or remove existing ones by their keys. Every time something changes, display the updated dictionary on the screen.

Discussion

© 2024, codelessons.dev