Skip to content

Latest commit

 

History

History
246 lines (140 loc) · 7.59 KB

Генераторы словарей.md

File metadata and controls

246 lines (140 loc) · 7.59 KB

Дополните приведенный код, используя генератор, так чтобы получить словарь result , в котором ключом будет позиция числа в списке numbers (начиная с 0), а значением – его квадрат.

numbers = [34, 10, -4, 6, 10, 23, -90, 100, 21, -35, -95, 1, 36, -38, -19, 1, 6, 87]

result = {}

Генераторы словарей

Пусть требуется создать словарь, ключами которого будут числа от 0 до 5, а значениями – квадраты ключей.

Для создания требуемого словаря можно использовать код:

squares = {}

squares[0] = 0
squares[1] = 1
squares[2] = 4
squares[3] = 9
squares[4] = 16
squares[5] = 25

или:

squares = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

или:

squares = {}

for i in range(6):
    squares[i] = i**2

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

squares = {i: i**2 for i in range(6)}

Общий вид генератора словаря следующий:

{ключ: значение for переменная in последовательность}


Генератор словаря при итерировании по строке.

Приведенный ниже код:

dct = {c: c * 3 for c in 'ORANGE'}

print(dct)

выводит:

{'O': 'OOO', 'R': 'RRR', 'A': 'AAA', 'N': 'NNN', 'G': 'GGG', 'E': 'EEE'}

Для вычисления ключа и значения в генераторе словаря могут быть использованы выражения.

В следующем примере для вычисления ключа используется метод lower(), а для вычисления значения – метод upper().

Приведенный ниже код:

lst = ['ReD', 'GrEeN', 'BlUe']
dct = {c.lower(): c.upper() for c in lst}

print(dct)

выводит:

{'red': 'RED', 'green': 'GREEN', 'blue': 'BLUE'}

Извлечение из словаря элементов с определенными ключами.

Приведенный ниже код:

dict1 = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F'}
selected_keys = [0, 2, 5]

dict2 = {k: dict1[k] for k in selected_keys}

print(dict2)

выводит:

{0: 'A', 2: 'C', 5: 'F'}

Дополните приведенный код, используя генератор, так, чтобы получить словарь result, состоящий из всех элементов словаря months , в которых ключ и значение поменялись местами.

months = {1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'}

result = {}

Условия в генераторе словарей

В генераторах словарей можно использовать условный оператор.

Приведенный ниже код создает словарь, ключами которого являются четные числа от 0 до 9, а значениями – квадраты ключей:

squares = {}
for i in range(10):
    if i % 2 == 0:
        squares[i] = i**2

print(squares)

Такой код можно переписать с помощью генератора словаря в виде: 

squares = {i: i**2 for i in range(10) if i % 2 == 0}

print(squares)

Генераторы вложенных словарей

Мы также можем использовать генераторы словарей для создания вложенных словарей:

Приведенный ниже код: 

squares = {i: {j: j**2 for j in range(i + 1)} for i in range(5)}

for value in squares.values():
    print(value)

выводит:

{0: 0}
{0: 0, 1: 1}
{0: 0, 1: 1, 2: 4}
{0: 0, 1: 1, 2: 4, 3: 9}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Дополните приведенный код, используя генератор, чтобы получить словарь result, состоящий из всех элементов словаря colors, кроме тех, у которых значением является None.

colors = {'c1': 'Red', 'c2': 'Grey', 'c3': None, 'c4': 'Green', 'c5': 'Yellow', 'c6': 'Pink', 'c7': 'Orange', 'c8': None, 'c9': 'White', 'c10': 'Black', 'c11': 'Violet', 'c12': 'Gold', 'c13': None, 'c14': 'Amber', 'c15': 'Azure', 'c16': 'Beige', 'c17': 'Bronze', 'c18': None, 'c19': 'Lilac', 'c20': 'Pearl', 'c21': None, 'c22': 'Sand', 'c23': None}

result = {}

Дополните приведенный код, используя генератор, чтобы получить словарь result, состоящий из всех элементов словаря favorite_numbers , значения которых являются двузначными числами.

favorite_numbers = {'timur': 17, 'ruslan': 7, 'larisa': 19, 'roman': 123, 'rebecca': 293, 'ronald': 76, 'dorothy': 62, 'harold': 36, 'matt': 314, 'kim': 451, 'rosaly': 18, 'rustam': 89, 'soltan': 111, 'amir': 654, 'dima': 390, 'amiran': 777, 'geor': 999, 'sveta': 75, 'rita': 909, 'kirill': 404, 'olga': 271, 'anna': 55, 'madlen': 876}

result = {}

    Используя генератор, дополните приведенный код, чтобы получить словарь result , где ключом будет элемент списка numbers, а значением – отсортированный по возрастанию список всех его делителей начиная с 1.

Примечание 1. Если бы список numbers имел вид: numbers = [1, 6, 18], то результатом был бы словарь

result = {1: [1], 6: [1, 2, 3, 6], 18: [1, 2, 3, 6, 9, 18]}
numbers = [34, 10, 4, 6, 10, 23, 90, 100, 21, 35, 95, 1, 36, 38, 19, 1, 6, 87, 1000, 13456, 360]

result = {}

Дополните приведенный код, используя генератор, чтобы получить словарь result, состоящий из всех элементов словаря letters , за исключением тех, ключи которых есть в списке remove_keys

letters = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I', 9: 'J', 10: 'K', 11: 'L', 12: 'M', 13: 'N', 14: 'O', 15: 'P', 16: 'Q', 17: 'R', 18: 'S', 19: 'T', 20: 'U', 21: 'V', 22: 'W', 23: 'X', 24: 'Y', 26: 'Z'}

remove_keys = [1, 5, 7, 12, 17, 19, 21, 24]

result = {}