Введение в словари. Урок 11

Основы программирования на Python

Одним из сложных типов данных (наряду со строками и списками) в языке программирования Python являются словари. Словарь - это изменяемый (как список) неупорядоченный (в отличие от строк и списков) набор пар "ключ:значение".

Чтобы представление о словаре стало более понятным, можно провести аналогию с обычным словарем, например, англо-русским. На каждое английское слово в таком словаре есть русское слово-перевод: cat – кошка, dog – собака, table – стол и т.д. Если англо-русский словарь описывать с помощью Python, то английские слова будут ключами, а русские — их значениями:

{'cat':'кошка', 'dog':'собака', 'bird':'птица', 'mouse':'мышь'}

Обратите внимание на фигурные скобки, именно с их помощью определяется словарь. Синтаксис словаря на Питоне можно описать такой схемой:
Синтаксис словаря на Python

Если создать словарь в интерпретаторе Python, то после нажатия Enter можно наблюдать, что последовательность вывода пар "ключ:значение" не совпадает с тем, как было введено:

>>> {'cat':'кошка', 'dog':'собака', 'bird':'птица', 'mouse':'мышь'}
{'bird': 'птица', 'mouse': 'мышь', 'dog': 'собака', 'cat': 'кошка'}
>>> 

Дело в том, что в словаре абсолютно не важен порядок пар, и интерпретатор выводит их в случайном порядке. Тогда как же получить доступ к определенному элементу, если индексация не возможна в принципе? Ответ: в словаре доступ к значениям осуществляется по ключам, которые заключаются в квадратные скобки (по аналогии с индексами строк и списков).

>>> dic ={'cat':'кошка','dog':'собака','bird':'птица','mouse':'мышь'}
>>> dic['cat']
'кошка'
>>> dic['bird']
'птица'
>>>

Словари, как и списки, являются изменяемым типом данных: можно изменять, добавлять и удалять элементы (пары "ключ:значение"). Изначально словарь можно создать пустым (например, d = {}) и лишь потом заполнить его элементами. Добавление и изменение имеет одинаковый синтаксис: словарь[ключ] = значение. Ключ может быть как уже существующим (тогда происходит изменение значения), так и новым (происходит добавление элемента словаря). Удаление элемента словаря осуществляется с помощью функции del().

>>> dic ={'cat':'кошка','dog':'собака','bird':'птица','mouse':'мышь'}
>>> dic['elephant'] = 'бегемот'
>>> dic['fox'] = 'лиса'
>>> dic
{'fox': 'лиса', 'dog': 'собака', 'cat': 'кошка', 'elephant': 'бегемот', 'mouse': 'мышь', 'bird': 'птица'}
>>> dic['elephant'] = 'слон'
>>> del(dic['bird'])
>>> dic
{'fox': 'лиса', 'dog': 'собака', 'cat': 'кошка', 'elephant': 'слон', 'mouse': 'мышь'}
>>>

Тип данных ключей и значений словарей не обязательно должны быть строками. Значения словарей могут быть более сложными (содержать структуры данных, например, другие словари или списки).

>>> d = {1:'one',2:'two',3:'three'}
>>> d
{1: 'one', 2: 'two', 3: 'three'}
>>> d = {10:[3,2,8], 100:[1,10,5], 1000:[23,1,5]}
>>> d
{1000: [23, 1, 5], 10: [3, 2, 8], 100: [1, 10, 5]}
>>> d = {1.1:2, 1.2:0, 1.3:8}
>>> d
{1.3: 8, 1.2: 0, 1.1: 2}
>>> d = {1.1:2, 10:'apple', 'box':100}
>>> d
{'box': 100, 10: 'apple', 1.1: 2}
>>> 

Словари — это широко используемый тип данных языка Python. Для работы с ними существует ряд встроенных функций.

Практическая работа

  1. Создайте словарь, связав его с переменной school, и наполните его данными, которые бы отражали количество учащихся в десяти разных классах (например, 1а, 1б, 2б, 6а, 7в и т.д.).
  2. Узнайте сколько человек в каком-нибудь классе.
  3. Представьте, что в школе произошли изменения, внесите их в словарь:
    - в трех классах изменилось количество учащихся;
    - в школе появилось два новых класса;
    - в школе расформировали один из классов.
  4. 4. Выведите содержимое словаря на экран.

school = {'1а':20, '1б':21,

school = {'1а':20, '1б':21, '2а':15, '2б':33}
print (school)
number = input ('Введите номер класса: ')
print('В том классе учится', school[number], 'детей')
a = school['1а'] + 3
b = school['2а'] - 2
c = school['2б'] + 1
school['1а'] = a
school['2а'] = b
school['2б'] = c
print (school)

Как сделать, чтобы выводилось не 'Введите номер класса: ', а 'Введите номер класса из списка: '? Т.е. должен выводиться список всех классов через запятую.

Например: school = {'1а':20,

Например:

school = {'1а':20, '1б':21, '2а':15, '2б':33}
print('Введите номер класса из списка: ',end='')
for i in school:
    print(i,end=' ')
print()
number = input ()
print('В том классе учится', school[number], 'детей')

Если нужно, чтобы ключи не были в разброс, используется встроенная функция сортировки:

...
for i in sorted(school):
    print(i,end=' ')
...

i = '0' l = 1 school =

i = '0'
l = 1
school = {}
print('Вы директор школы')
print('Текущее положение классов/учащихся.')
k = int(input('Колличество классов в школе: '))
d = 0
while d != k:
    i = input('Введите № класса: ')
    l = int(input('Введите кол. учащихся в классе: '))
    d += 1
    school[i] = l
if k == d:
    print(school)
print('В скольких классах произошли изменения?')
d = 0
h = int(input())
while d != h:
    i = input('Введите № класса в котором произошло изменение: ')
    l = int(input('Введите кол. учащихся в классе, если класса больше нет, введите "0": '))
    if l == 0:
        del(school[i])
    d += 1
school[i] = l
print(school)

впринципе работает как и хотел,но во второй части кода :

    if l == 0:
        del(school[i])

не удаляет элемент словаря.
подскажите что не так?

Непонятно что делать, если

Непонятно что делать, если кол-во классов введено отрицательное, номера классов в которых произошли изменения отличаются от указанных. Ошибка не выдается.

Класс удаляется. Пример

Класс удаляется.

Пример вывода:

Вы директор школы
Текущее положение классов/учащихся.
Колличество классов в школе: 3
Введите № класса: 1
Введите кол. учащихся в классе: 20
Введите № класса: 2
Введите кол. учащихся в классе: 21
Введите № класса: 3
Введите кол. учащихся в классе: 18
{'1': 20, '2': 21, '3': 18}
В скольких классах произошли изменения?
2
Введите № класса в котором произошло изменение: 2
Введите кол. учащихся в классе, если класса больше нет, введите "0": 0
Введите № класса в котором произошло изменение: 3
Введите кол. учащихся в классе, если класса больше нет, введите "0": 19
{'1': 20, '3': 19}

Такой вопрос: если в паре

Такой вопрос: если в паре ключ:значение, значение представлено списком, можно ли поменять значение элемента списка, не вбивая список заново?
Например, x={5: 'e', 6: ['f', 'g']}
Можно написать
x[6]=['f','N']
Но должен же быть пособ изменить f на N напрямую.
Или не должен?

x[6][0]='N'

x[6][0]='N'

Выдает ошибку - TypeError:

Выдает ошибку - TypeError: expected bytes, not str. Как ее избежать в данном случае?

school={"1a":20, "1b":21, "2a":18, "2b":23, "2v":19, "3a":27}
print (school["3a"])
school["2a"]=26
del (school["2v"])
school["1v"]=20
school["1a"]=24
school["3a"]=20
school["3b"]=19
print (school)

#

# 1
school={'1a':'35','1b':'30','2a':'33','6v':'40','7b':'40','8a':'33','9b':'50','10a':'20','11a':'19','11b':'30'}
 
# 2
print school['1a']
 
 
# 3
school['1a']=['49']
school['1b']=['51']
school['2a']=['53']
 
school['1v']=['47']
school['2v']=['55']
del(school['6v'])
 
# 4
print school
<python>

school = {'1a':10, '2b':11,

school = {'1a':10, '2b':11, '3c':12, '4d':13, '5e':14 }
print school['5e']
school['1a'] = 15
school['2b'] = 20
school['3c'] = 30
school['6q'] = 100
school['7w'] = 200
del(school['4d'])
print school