Словари — один из способов хранения данных в Python. Однако, между ними и списками есть существенная разница: в словарях доступ к элементу осуществляется с помощью уникального ключа, а в списках — по индексу элемента.
Иногда именно словарь оказывается наиболее подходящей структурой данных для решения тех или иных задач. Они часто применяются и в Data Science, поэтому словарные включения (dictionary comprehension) будет полезным навыком для вас.
Примечание: Ключи в словаре должны быть хэшируемыми.
Хэширование — это процесс преобразования элемента с использованием определенного вида функции. Такая функция называется «хэш-функцией» и возвращает уникальное выходное значение для уникального входного. Целые числа, числа с плавающей точкой, строки, кортежи и замороженные множества (frozensets) хэшировать можно, в то время как списки, словари и обычные множества — нет.
a = {'яблоко': 'фрукт', 'свекла': 'овощ', 'торт': 'десерт'}
a['пончик'] = 'закуска'
print(a['яблоко'])
# фрукт
print(a[0])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-2-6dd185293d34> in <module>()
2 a['пончик'] = 'закуска'
3
----> 4 print(a[0])
KeyError: 0
Элементы в рамках одного и того же словаря могут принадлежать к разным типам данных.
a = {'один': 1, 'два': 'два', 'три': 3.0, 'четыре': [4, 4.0]}
print(a)
# {'один': 1, 'два': 'два', 'три': 3.0, 'четыре': [4, 4.0]}
a['один'] = 1.0
print(a)
# {'один': 1.0, 'два': 'два', 'три': 3.0, 'четыре': [4, 4.0]}
del a['один']
print(a)
# {'два': 'два', 'три': 3.0, 'четыре': [4, 4.0]}
a.clear()
print(a)
# {}
del a
print(a)
# NameError: name 'a' is not defined
a = {'один': 1, 'два': 'два', 'один': 3.0}
print(a['один'])
# 3.0
a = {'один': 1, 'два': 'два', 'три': 3.0}
print(a.keys())
print(a.values())
# dict_keys(['один', 'два', 'три'])
# dict_values([1, 'два', 3.0])
print(a.items())
# dict_items([('один', 1), ('два', 'два'), ('три', 3.0)])
dict_variable = {key:value for key, value in dictonary.items()}
numbers = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
double_numbers = {k:v*2 for k, v in numbers.items()}
print(double_numbers)
# {'a': 2, 'b': 4, 'c': 6, 'd': 8, 'e': 10}
numbers = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
double_numbers = {k*2:v for (k, v) in numbers.items()}
print(double_numbers)
# {'aa': 1, 'bb': 2, 'cc': 3, 'dd': 4, 'ee': 5}
numbers = range(10)
new_dict_for = {}
for n in numbers:
if n % 2==0:
new_dict_for[n] = n ** 2
print(new_dict_for)
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
new_dict_comp = {n:n**2 for n in numbers if n%2 == 0}
print(new_dict_comp)
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
fahrenheit = {'t1': -30, 't2': -20, 't3': -10, 't4': 0}
celsius = list(map(lambda x: (float(5)/9)*(x-32), fahrenheit.values()))
celsius_dict = dict(zip(fahrenheit.keys(), celsius))
print(celsius_dict)
# {'t1': -34.44444444444444, 't2': -28.88888888888889, 't3': -23.333333333333336, 't4': -17.77777777777778}
fahrenheit = {'t1': -30, 't2': -20, 't3': -10, 't4': 0}
celsius = {k:(float(5)/9)*(v-32) for k, v in fahrenheit.items()}
print(celsius)
# {'t1': -34.44444444444444, 't2': -28.88888888888889, 't3': -23.333333333333336, 't4': -17.77777777777778}
dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
dict1_cond = {k:v for k, v in dict1.items() if v > 2}
print(dict1_cond)
# {'c': 3, 'd': 4, 'e': 5}
dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
dict1_triple_cond = {k:v for k, v in dict1.items() if v>2 if v%2 == 0 if v%3 == 0}
print(dict1_triple_cond)
# {'f': 6}
dict1_triple_cond = {}
for (k,v) in dict1.items():
if (v >= 2 and v % 2 == 0 and v % 3 == 0):
dict1_triple_cond[k] = v
print(dict1_triple_cond)
# {'f': 6}
dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f':6}
dict1_triple_cond = {k:('even' if v%2==0 else 'odd') for k, v in dict1.items()}
print(dict1_triple_cond)
# {'a': 'odd', 'b': 'even', 'c': 'odd', 'd': 'even', 'e': 'odd', 'f': 'even'}
nested_dict = {'first':{'a': 1}, 'second':{'b': 2}}
float_dict = {outer_k: {inner_k: float(inner_v) for inner_k, inner_v
in outer_v.items()} for (outer_k, outer_v)
in nested_dict.items()}
print(float_dict)
# {'first': {'a': 1.0}, 'second': {'b': 2.0}}
nested_dict = {'first':{'a': 1}, 'second':{'b': 2}}
for outer_k, outer_v in nested_dict.items():
for inner_k, inner_v in outer_v.items():
outer_v.update({inner_k: float(inner_v)})
nested_dict.update({outer_k:outer_v})
print(nested_dict)
# {'first': {'a': 1.0}, 'second': {'b': 2.0}}
Источник: Data Camp