7. Key-Value Collections

7.1. dict

7.1.1. Creating dict

  • dict items order changes!
  • dict are key-value storage
  • Comma after last element is optional
my_dict = {}
my_dict = dict()
my_dict = {
    'first_name': 'José',
    'last_name': 'Jiménez'
}
my_dict = {
    'first_name': 'José',
    'last_name': 'Jiménez',
}

7.1.2. Duplicating items are overridden by latter

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

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

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

7.1.5. Adding values to dict

  • Adds if value not exist
  • Updates if value exist
data = {
    'first_name': 'José',
    'last_name': 'Jiménez',
}

data['agency'] = 'NASA'

print(data)
# {
#   'first_name': 'José',
#   'last_name': 'Jiménez',
#   'agency': 'NASA'
# }
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'
# }

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

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

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

7.2. dict vs. set

  • both set and dict keys mus be hashable

  • both set and dict uses the same ({ and }) braces:

    {}                                # dict
    {1}                               # set
    
    {1, 2}                            # set
    {1: 2}                            # dict
    
    {1, 2,}                           # set
    {1: 2,}                           # dict
    
    {1: 2, 3: 4}                      # dict
    {1, 2, 3, 4}                      # set
    
  • Despite similar syntax, they are different types:

    my_data = {}
    isinstance(my_data, (set, dict))  # True
    isinstance(my_data, dict)         # True
    isinstance(my_data, set)          # False
    
    my_data = {1}
    isinstance(my_data, (set, dict))  # True
    isinstance(my_data, dict)         # False
    isinstance(my_data, set)          # True
    
    my_data = {1: 1}
    isinstance(my_data, (set, dict))  # True
    isinstance(my_data, dict)         # True
    isinstance(my_data, set)          # False
    

7.3. Assignments

7.3.1. Aviation Language

  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, k†óry nie jest w alfabecie, to wypisz “Pilots don’t say that”
  10. Nie używaj konstrukcji if, ani try i except
Tab. 7.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
Z Zulu
About:
  • Filename: collections_aviation_alphabet.py
  • Lines of code to write: 30 lines
  • Estimated time of completion: 15 min
The whys and wherefores:
 
  • Definiowanie i korzystanie z dict z wartościami
  • Rzutowanie i konwersja typów