Карты Python, также называемые ChainMap, представляют собой тип структуры данных для управления несколькими словарями как единым целым. Объединенный словарь содержит пары ключ-значение в определенной последовательности, исключая дублирование ключей. Лучшее использование ChainMap — это поиск по нескольким словарям одновременно и получение правильного сопоставления пары ключ-значение. Мы также видим, что эти ChainMaps ведут себя как структура данных стека.
Создание ChainMap
Мы создаем два словаря и объединяем их в клубы с помощью метода ChainMap. Затем мы печатаем ключи и значения результата комбинации словарей. Если есть повторяющиеся ключи, то сохраняется только значение из первого ключа.
import collections dict1 = {'day1': 'Mon', 'day2': 'Tue'} dict2 = {'day3': 'Wed', 'day1': 'Thu'} res = collections.ChainMap(dict1, dict2) # Creating a single dictionary print(res.maps,'\n') print('Keys = {}'.format(list(res.keys()))) print('Values = {}'.format(list(res.values()))) print() # Print all the elements from the result print('elements:') for key, val in res.items(): print('{} = {}'.format(key, val)) print() # Find a specific value in the result print('day3 in res: {}'.format(('day1' in res))) print('day4 in res: {}'.format(('day4' in res)))
Когда приведенный выше код выполняется, он дает следующий результат.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day1': 'Thu', 'day3': 'Wed'}] Keys = ['day1', 'day3', 'day2'] Values = ['Mon', 'Wed', 'Tue'] elements: day1 = Mon day3 = Wed day2 = Tue day3 in res: True day4 in res: False
Изменение порядка карт
Если мы изменим порядок словарей во время их объединения в приведенном выше примере, мы увидим, что положение элементов меняется, как если бы они были в непрерывной цепочке. Это снова показывает поведение Карт как стеков.
import collections dict1 = {'day1': 'Mon', 'day2': 'Tue'} dict2 = {'day3': 'Wed', 'day4': 'Thu'} res1 = collections.ChainMap(dict1, dict2) print(res1.maps,'\n') res2 = collections.ChainMap(dict2, dict1) print(res2.maps,'\n')
Когда приведенный выше код выполняется, он дает следующий результат.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}] [{'day3': 'Wed', 'day4': 'Thu'}, {'day1': 'Mon', 'day2': 'Tue'}]
Обновление карты
Когда элемент словаря обновляется, результат мгновенно обновляется в результате ChainMap. В приведенном ниже примере мы видим, что новое обновленное значение отражается в результате без явного повторного применения метода ChainMap.
import collections dict1 = {'day1': 'Mon', 'day2': 'Tue'} dict2 = {'day3': 'Wed', 'day4': 'Thu'} res = collections.ChainMap(dict1, dict2) print(res.maps,'\n') dict2['day4'] = 'Fri' print(res.maps,'\n')
Когда приведенный выше код выполняется, он дает следующий результат.