Python. Работа со словарями. Встроенные функции list(), zip(). Обход словаря. Генераторы словарей. Сортировка. Сочетание словарей с множествами

Работа со словарями. Встроенные функции list(), zip(). Обход словаря. Генераторы словарей. Сортировка. Сочетание словарей с множествами


Содержание


1. Встроенная функция list(). Пример применения со словарями

Использование встроенной функции list() позволяет получать списки значений, ключей и пар (ключ:значение). Чтобы сформировать соответствующий список с помощью list() нужно использовать один из следующих методов:

  • метод values() позволяет получить список значений словаря;
  • метод keys() позволяет получить список ключей словаря;
  • метод items() позволяет получить список пар (ключ:значение).

Более подробно об использовании методов values(), keys(), items() описывается здесь.

Пример.

# Работа со словарями
# Встроенный метод list()

# Исходный словарь
Figures = { 1:'Rectangle', 2:'Triangle', 3:'Circle'}

# 1. Получить список значений словаря
values = list(Figures.values())
print(values) # ['Rectangle', 'Triangle', 'Circle']

# 2. Получить список ключей словаря
keys = list(Figures.keys()) # keys = [1, 2, 3, 4]
print(keys)

# 3. Получить список пар (ключ:значение)
pairs = list(Figures.items())
print(pairs) # [(1,'Rectangle'),(2,'Triangle'),(3,'Circle')]

 

2. Встроенная функция zip(). Пример создания словаря

Функция zip() позволяет создать словарь путем объединения списков ключей и значений.

Пример.

# Словари. Функция zip()

# Создание словаря из списков ключей и значений
Numbers = dict(zip([1, 2, 3], ['One', 'Two', 'Three']))
print(Numbers) # {1: 'One', 2: 'Two', 3: 'Three'}

 

3. Обход словаря с помощью цикла for. Пример

В примере демонстрируется обход словаря с помощью цикла for и вывод всех пар (ключ:значение).

Пример.

# Работа со словарями
# Обход словаря с помощью цикла for

# Исходный словарь
Months = { 1:'Jan', 2:'Feb', 3:'Mar',
           4:'Apr', 5:'May', 6:'Jun',
           7:'Jul', 8:'Aug', 9:'Sep',
           10:'Oct', 11:'Nov', 12:'Dec' }

# Цикл for обхода словаря
# в цикле mn - ключ, Months[mn] - значение
for mn in Months:
    print(mn, ': ', Months[mn])

Результат выполнения программы

1 : Jan
2 : Feb
3 : Mar
4 : Apr
5 : May
6 : Jun
7 : Jul
8 : Aug
9 : Sep
10 : Oct
11 : Nov
12 : Dec


 

4. Использование словарей для разреженных структур данных. Пример

Словари могут эффективно использоваться для представления разреженных структур данных. Примерами таких данных могут быть двумерные массивы, в которых только несколько элементов имеют определенные значения.

Пример. В примере продемонстрировано представление разреженной матрицы чисел в виде словаря. Пусть задана матрица

Разреженная матрица чисел,

которую нужно представить в виде словаря. Решение задачи следующее:

# Словари. Представление разреженных структур данных

# Матрица M
M = {} # создать пустой словарь
M[(0, 1)] = 1 # ключ=(0,1): значение=1
M[(1, 2)] = 3 # пара (ключ:значение) = ((1,2):3)
M[(2, 0)] = 2 # пара (ключ:значение) = ((2,0):2)

print(M) # {(0, 1): 1, (1, 2): 3, (2, 0): 2}

В вышеприведенном примере ключами словаря являются кортежи, которые содержат координаты непустых элементов. Так, значение ключа (2, 0) означает строку 2, столбец 0.

 

5. Создание словарей с помощью генераторов словарей. Примеры

Словари можно создавать с использованием генераторов словарей. В этом случае используется один из нижеследующих способов:

  • сгенерировать словарь на основе заданного выражения;
  • сгенерировать словарь на основе итерированного объекта;
  • инициализировать словарь из списков ключей;
  • сгенерировать словарь с использованием функции zip().

В примере демонстрируется использование всех способов.

Пример.

# Словари. Генераторы словарей

# 1. Сгенерировать словарь на основе заданного выражения
# Генерируются пары (ключ: значение) = (i: 5*i)
A = { i: i*5 for i in [10,20,30,40] }
print(A) # {10: 50, 20: 100, 30: 150, 40: 200}

# 2. Сгенерировать словарь по итерируемому объекту (строке)
s = 'Hello'
B = { sym: sym*3 for sym in s } # пара (sym:sym*3)
print(B) # {'H': 'HHH', 'e': 'eee', 'l': 'lll', 'o': 'ooo'}

numbers = [ 15, 25, 30 ]
C = { num: str(num) for num in numbers }
print(C) # {15: '15', 25: '25', 30: '30'}

# 3. Инициализация словаря из списка ключей
# Заполнить список ключей значением, введенным с клавиатуры
value = int(input('Input value: '))
listKeys = [ 1, 2, 3, 4 ]
D = { lk:value for lk in listKeys }
print(D)

# Заполнить список ключей значением None
value = None
listKeys = [ 'a', 'b', 'c' ]
E = { lk:value for lk in listKeys }
print(E) # {'a': None, 'b': None, 'c': None}

# 4. Сгенерировать словарь с использованием функции zip()
WMonths = [ 'Dec', 'Jan', 'Feb']
NumMonths = [ 12, 1, 2 ]
F = { nm:wm for (nm,wm) in zip(NumMonths,WMonths) }
print(F) # {12: 'Dec', 1: 'Jan', 2: 'Feb'}

 

6. Сортировка словаря. Пример

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

Пример.

# Словари. Сортировка по ключам

# Исходный словарь
A = { 'f':10, 'а':2, 'с':17 }

# Сортировка по ключам
# 1. Получить представление ключей
ak = A.keys() # ak = dict_keys(['f', 'а', 'с'])

# 2. Конвертировать представления ak в список
list_ak = list(ak) # list_ak = ['f', 'а', 'с']

# 3. Отсортировать список ключей - функция sort()
list_ak.sort() # ['а', 'с', 'f']

# 4. Вывести перечень (ключ:значение)
# в отсортированном порядке по ключам,
# сформировать новый словарь
B = {}
for k in list_ak:
    print('(', k, ': ', A[k], ')')
    B[k] = A[k]

print(B) # {'a': 2, 'c': 17, 'f': 10}

 

7. Пример использования списков ключей словаря в операциях над множествами

На основании ключей словаря можно образовывать списки. Эти списки ключей могут быть использованы в операциях над множествами, которые образовывают новое множество. Другими словами, можно смешивать разные объекты представлений (множества, словари) между собой с помощью соответствующих операций.

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

Пример. В примере продемонстрировано взаимодействие словарей и множеств с помощью операций над множествами |, &, ^.

# Словари. Объединение словарей и множеств

# Исходный словарь
A = { 1:'One', 2:'Two', 3:'Three', 4:'Four', 5:'Five' }

# Объединение отображения ключей и множеств,
# получается новое множество

# 1. Получить отображение ключей
keys = A.keys() # keys = dict_keys([1, 2, 3, 4, 5])

# 2. Сформировать новое множество ключей которое содержит число 2
B = keys & {2} # B = {2} - новое множество

# 3. Сформировать новое множество ключей, которое содержит числа 3, 5
C = keys {3, 5} # {1, 2, 4}

# 4. Добавить к множеству ключей числа 8, 11
D = keys | { 8, 11 } # D = {1, 2, 3, 4, 5, 8, 11}

 


Связанные темы