9. dict

9.1. Defining dict

  • dict items order changes!
  • dict are key-value storage
  • Comma after last element is optional

9.1.1. Empty dict

my_dict = {}
my_dict = dict()

9.1.2. dict with multiple values

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

9.1.3. Duplicating items are overridden by latter

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

9.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',
}

9.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'),
}

9.2. Adding elements

  • Adds if value not exist
  • Updates if value exist

9.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'
# }

9.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'
# }

9.3. Accessing elements

9.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'

9.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'

9.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)]

9.4. Length of a dict

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

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

9.5. Assignments

9.5.1. Aviation Language

  • Filename: dict_alphabet.py
  • Lines of code to write: 30 lines
  • Estimated time of completion: 15 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
  6. Wypisz na ekranie nazwę fonetyczną litery
  7. Jeżeli użytkownik podał więcej niż jedną literę, to wybierz z ciągu tylko pierwszą
  8. Słownik ma wyświetlić kod bez względu na to czy użytkownik podał dużą czy małą literę
  9. Jeżeli wpisał znak, który nie jest w alfabecie, to wypisz “Pilots don’t say that”
  10. 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
Tab. 9.1. 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