Программирование и анализ данных

Алла Тамбовцева, НИУ ВШЭ

Семинар по темам: кортежи и словари

Задача 1

Дан словарь с названиями разных рептилий:

In [1]:
rept = {"python" : " питон", 
        "anaconda" : "анаконда", 
        "tortoize" : " черепаха" }
  • Добавьте в словарь пару "snake" - " змея".
  • Исправьте ключ "tortoize" на правильный "tortoise".
  • Выведите на экран сообщения вида

    Питон по-английски будет python.

для всех слов в словаре (сообщение для каждого слова ‒ с новой строчки).

In [2]:
# 1
rept["snake"] = "змея"

# 2
del rept["tortoize"] # удаляем запись с неправильным ключом
rept["tortoise"] = "черепаха" # добавляем с правильным

# проверяем
print(rept)
{'python': ' питон', 'anaconda': 'анаконда', 'snake': 'змея', 'tortoise': 'черепаха'}
In [3]:
# 3
for k, v in rept.items():
    print(f"{v.strip().capitalize()} по-английски будет {k}.")
Питон по-английски будет python.
Анаконда по-английски будет anaconda.
Змея по-английски будет snake.
Черепаха по-английски будет tortoise.

Задача 2

В списке cnt хранятся названия стран, а в списке fh – значения индекса Freedom House для этих стран. Создайте словарь, используя в качестве ключей названия стран, а в качестве значений – значения индекса.

In [5]:
cnt = ["Andorra", "Belarus", "Denmark", 
       "Kenya", "Jamaica", "Romania"]
fh = [1.0, 6.0, 1.0, 4.0, 2.5, 2.0]
In [6]:
data = dict(zip(cnt, fh))
print(data) 
{'Andorra': 1.0, 'Belarus': 6.0, 'Denmark': 1.0, 'Kenya': 4.0, 'Jamaica': 2.5, 'Romania': 2.0}

Задача 3

Дан список, состоящий из пар чисел:

In [8]:
pairs = [(2, 4), (4, 6), (0, 1), (5, 2), (9, 1), (3, 8)]

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

In [9]:
calc = {}
for p in pairs:
    calc[p] = p[0] * p[1]
print(calc) 
{(2, 4): 8, (4, 6): 24, (0, 1): 0, (5, 2): 10, (9, 1): 9, (3, 8): 24}

Обратите внимание: если бы pairs был списком списков, то ничего бы не получилось – как мы обсуждали, изменяемые объекты не могут быть ключами в словаре.

In [10]:
pairs2 = [[2, 4], [4, 6], [0, 1], [5, 2], [9, 1], [3, 8]]
calc = {}

# не сработает, список – изменяемый
for p in pairs2:
    calc[p] = p[0] * p[1]
print(calc)            
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-0325e32c443c> in <module>
      4 # не сработает, список – изменяемый
      5 for p in pairs2:
----> 6     calc[p] = p[0] * p[1]
      7 print(calc)

TypeError: unhashable type: 'list'

Задача 4

Дан словарь grades с оценками студентов за контрольную работу в 5-балльной шкале. Напишите код, который сделает следующее:

  • Выведет на экран имя каждого студента и его оценку (каждый студент – с новой строки).
  • Сохранит имена студентов, получивших отличные оценки, в список excel.
  • Сохранит имена студентов, получивших хорошие оценки, в список good.
  • Сохранит имена студентов, получивших удовлетворительные оценки, в список satisf.
  • Сохранит имена студентов, получивших плохие оценки, в список bad.
In [11]:
grades = {'Anna': 4, 'Bob': 3, 'Claire': 5, 'Dick': 2, 'Elena': 5, 
         'Fred': 5, 'George': 4, 'Kristina': 3, 'Nick': 2, 
         'Ursula': 4, 'Viktor': 5}
In [12]:
# решение 1
excel, good, satisf, bad = [], [], [], []

for name, grade in grades.items():
    print(name, grade)
    if grade == 5:
        excel.append(name)
    if grade == 4:
        good.append(name)
    if grade == 3:
        satisf.append(name)
    if grade == 2:
        bad.append(name)
Anna 4
Bob 3
Claire 5
Dick 2
Elena 5
Fred 5
George 4
Kristina 3
Nick 2
Ursula 4
Viktor 5
In [13]:
print(excel, good, satisf, bad)
['Claire', 'Elena', 'Fred', 'Viktor'] ['Anna', 'George', 'Ursula'] ['Bob', 'Kristina'] ['Dick', 'Nick']
In [14]:
# решение 2 – с elif
excel, good, satisf, bad = [], [], [], []

for name, grade in grades.items():
    print(name, grade)
    if grade == 5:
        excel.append(name)
    elif grade == 4:
        good.append(name)
    elif grade == 3:
        satisf.append(name)
    else:
        bad.append(name)
print(excel, good, satisf, bad)
Anna 4
Bob 3
Claire 5
Dick 2
Elena 5
Fred 5
George 4
Kristina 3
Nick 2
Ursula 4
Viktor 5
['Claire', 'Elena', 'Fred', 'Viktor'] ['Anna', 'George', 'Ursula'] ['Bob', 'Kristina'] ['Dick', 'Nick']
In [15]:
# решение 3 – без .items()

excel, good, satisf, bad = [], [], [], []

for name in grades:
    print(name, grades[name])
    if grades[name] == 5:
        excel.append(name)
    elif grades[name] == 4:
        good.append(name)
    elif grades[name] == 3:
        satisf.append(name)
    else:
        bad.append(name)
print(excel, good, satisf, bad)
Anna 4
Bob 3
Claire 5
Dick 2
Elena 5
Fred 5
George 4
Kristina 3
Nick 2
Ursula 4
Viktor 5
['Claire', 'Elena', 'Fred', 'Viktor'] ['Anna', 'George', 'Ursula'] ['Bob', 'Kristina'] ['Dick', 'Nick']