4.2 Словари

Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется словарем или ассоциативным массивом. Соответствующая структура данных в языке Python 3 называется dict.

Каждый элемент словаря состоит из двух объектов: ключа и значения. В примере ниже ключом является название страны, а значением является название столицы. Ключ идентифицирует элемент словаря, значение является данными, которые соответствуют данному ключу. Значения ключей – уникальны, двух одинаковых ключей в словаре быть не может.


# Создадим пустой словарь Capitals

Capitals = dict()


# Заполним его несколькими значениями

Capitals['Russia'] = 'Moscow'

Capitals['Ukraine'] = 'Kiev'

Capitals['USA'] = 'Washington'


Countries = ['Russia', 'France', 'USA', 'Russia']


for country in Countries:

    # Для каждой страны из списка проверим, есть ли она в словаре Capitals

    if country in Capitals:

        print('Столица страны ' + country + ': ' + Capitals[country])

    else:

        print('В базе нет страны c названием ' + country)


Столица страны Russia: Moscow

В базе нет страны c названием France

Столица страны USA: Washington

Столица страны Russia: Moscow

Методы словарей:

   • clear() – очищает словарь;

   • copy() – возвращает копию словаря;

   • fromkeys(seq[, value]) – создает словарь с ключами из seq и значением value (по умолчанию None);

   • get(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None);

   • items() – возвращает пары (ключ, значение);

   • keys() – возвращает ключи в словаре;

   • pop(key[, default]) – удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение);

   • popitem() – удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены;

   • setdefault(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None);

   • update([other]) – обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!);

   • values() – возвращает значения в словаре.

Countries = ( 'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington', 'Kazakhstan': 'Astana' )


print(Countries)


key1 = 'USA'

key2 = 'us'

if key1 in Countries:

    del Countries[key1]


try:

    del Countries[key2]

except KeyError:

    print('Нет элемента с ключом "' + key2 + '" в словаре')


print(Countries)


( 'Ukraine': 'Kiev', 'Russia': 'Moscow', 'Kazakhstan': 'Astana', 'USA': 'Washington' )

Нет элемента с ключом "us" в словаре

( 'Ukraine': 'Kiev', 'Russia': 'Moscow', 'Kazakhstan': 'Astana' )


# Преобразование списка-кортеджа в словарь

users = (

    ("+111123455", "Tom"),

    ("+384767557", "Bob"),

    ("+958758767", "Alice")

)

users_dict = dict(users)

print(users)

print(users_dict)


# получаем элемент с ключом "+111123455"

print(users_dict["+111123455"]) # Tom


# установка значения элемента с ключом "+384767557"

users_dict["+384767557"] = "Bob Smith"

print(users_dict["+384767557"]) # Bob Smith


(('+111123455', 'Tom'), ('+384767557', 'Bob'), ('+958758767', 'Alice'))

( '+958758767': 'Alice', '+384767557': 'Bob', '+111123455': 'Tom' )

Tom

Bob Smith


4.2.1 Сортировка словарей


# Пример подсчета одинаковых символов в текстовом файле с использованием словаря

my_dict = dict()


my_text = open(u'D:/text.txt', 'r').read()


for c in my_text:

    if c in my_dict:

        my_dict[c] = my_dict[c] + 1

    else:

        my_dict.update( ( c: 1 ) )


for w in sorted(my_dict, key=my_dict.get, reverse=True):

    print(w, my_dict[w])


L 9

o 9

f 8

p 8



СкороКнижный режим