4. dict

4.1. Defining dict

  • Since Python 3.7 dict has of adding elements

  • Before Python 3.7 dict order is not ensured!!

  • dict are key-value storage

  • Comma after last element is optional

Note

Since Python 3.7: The insertion-order preservation nature of dict objects is now an official part of the Python language spec.

4.1.1. Empty dict

my_dict = {}
my_dict = dict()

4.1.2. dict with multiple values

my_dict = {
    'first_name': 'José',
    'last_name': 'Jiménez'
}

4.1.3. Duplicating items are overridden by latter

my_dict = {
    'name': 'José',
    'name': 'Иван',
}
# {'name': 'Иван'}

4.1.4. Key can be any hashable object

my_dict = {
    'first_name': 'José',
    'last_name': 'Jiménez',
}
my_dict = {
    1961: 'First Human Space Flight',
    1969: 'First Step on the Moon',
}
my_dict = {
    (1, 2): 'hello',
    (3, 4, 5): 'ehlo',
}
key = 'last_name'

my_dict = {
    'fist_name': 'key can be ``str``',
    key: 'key can be ``str``',
    1: 'key can be ``int``',
    1.5: 'key can be ``float``',
    (1, 2): 'key can be ``tuple``',
}

4.1.5. Value can be any object

my_dict = {
    'date': '1969-07-21',
    'age': 42,
    'astronaut': {'name': 'José Jiménez', 'medals': {'Medal of Honor', 'Purple Heart'}},
    'agency': ['NASA', 'Roscosmos', 'ESA'],
    'location': ('Bajkonur', 'KSC Florida'),
}

4.2. Adding elements

  • Adds if value not exist

  • Updates if value exist

4.2.1. Adding using [...] syntax

data = {
    'first_name': 'José',
    'last_name': 'Jiménez',
}

data['agency'] = 'NASA'

print(data)
# {
#   'first_name': 'José',
#   'last_name': 'Jiménez',
#   'agency': 'NASA'
# }

4.2.2. Adding using .update() method

data = {
    'name': 'José Jiménez',
}

data.update(age=42, location=['Bajkonur', 'Florida'])
data.update({'agency': 'NASA'})

print(data)
# {
#   'name': 'José Jiménez',
#   'age': 42,
#   'location': ['Bajkonur', 'Florida'],
#   'agency': 'NASA'
# }

4.3. Accessing elements

4.3.1. Accessing values with [...]

  • [...] throws KeyError exception if key not found in dict

data = {
    'first_name': 'José',
    'last_name': 'Jiménez',
    'age': 42,
    1961: 'First Human Space Flight',
    1969: 'First Step on the Moon',
}

data['last_name']          # 'Jiménez'
data[1961]                 # 'First Human Space Flight'
data['agency']             # KeyError: 'agency'

4.3.2. Accessing values with .get(...)

  • .get(...) returns None if key not found

  • .get(...) can have default value, if key not found

data = {
    'first_name': 'José',
    'last_name': 'Jiménez',
    'age': 42,
    1961: 'First Human Space Flight',
    1969: 'First Step on the Moon',
}

data.get('last_name')      # 'Jiménez'
data.get(1961)             # 'First Human Space Flight'
data.get('agency')         # None
data.get('agency', 'n/a')  # 'n/a'

4.3.3. Accessing dict keys, values and key-value pairs

my_dict = {
    'first_name': 'José',
    'last_name': 'Jiménez',
    'age': 42,
}

my_dict.keys()      # ['first_name', 'last_name', 'age']
my_dict.values()    # ['José', 'Jiménez', 42]
my_dict.items()     # [('first_name', 'José'), ('last_name', 'Jiménez'), ('age', 42)]

4.4. Length of a dict

my_dict = {
    'first_name': 'José',
    'last_name': 'Jiménez',
    'age': 42,
}

len(my_dict)                # 3
len(my_dict.keys())         # 3
len(my_dict.values())       # 3
len(my_dict.items())        # 3

4.5. Assignments

4.5.1. Aviation Language

  • Filename: dict_alphabet.py

  • Lines of code to write: 3 lines

  • Estimated time of completion: 10 min

  1. Stwórz słownik języka pilotów

  2. Pojedynczym literom przyporządkuj ich fonetyczne odpowiedniki

  3. Do przekonwertowania tabelki poniżej, wykorzystaj zaznaczanie wielu linijek za pomocą klawisza alt w Twoim IDE

  4. Wczytaj od użytkownika literę

  5. Użytkownik zawsze poda przynajmniej jedną literę, cyfrę lub znak specjalny, zawsze będzie to duża litera

  6. Wypisz na ekranie nazwę fonetyczną litery

  7. Jeżeli wpisał znak, który nie jest w alfabecie, to wypisz “Pilots don’t say that”

  8. Nie używaj konstrukcji if, ani try i except

The whys and wherefores
  • Definiowanie i korzystanie z dict z wartościami

  • Rzutowanie i konwersja typów

Table 4.3. Aviation Alphabet

Letter

Pronounce

A

Alfa

B

Bravo

C

Charlie

D

Delta

E

Echo

F

Foxtrot

G

Golf

H

Hotel

I

India

J

Juliet

K

Kilo

L

Lima

M

Mike

N

November

O

Oscar

P

Papa

Q

Quebec

R

Romeo

S

Sierra

T

Tango

U

Uniform

V

Victor

W

Whisky

X

X-Ray

Y

Yankee

Z

Zulu