====== Словари ====== Сегодня мы рассмотрим новый тип данных, который заметно отличается от тех, которыми мы пользовались ранее. В разных языках он называется по разному, например, в Перле это хэш (hash), в Яве или С# отображение (map), в Яваскрипте - ассоциативный массив. В Питоне же он называется словарь. В некотором смысле, он похож на массивы или списки, но в качестве элементов участвуют не одиночные объекты какого-либо типа, а пара. Первая часть пары называется ключ, а вторая - значение. До значения всегда можно добраться обратившись к нему по ключу, например: {{url>https://pt.nsunc.com/iframe-embed.html#code=d+%3D+dict(%29%0A%0Ad%5B%22Frodo%22%5D+%3D+%22has+the+Ring%22%0Ad%5B%22Sauron%22%5D+%3D+%22is+looking+for+the+Ring%22%0Ad%5B%22Gollum%22%5D+%3D+%22lost+the+Ring%22%0Ad%5B%22Gandalf%22%5D+%3D+%22does+not+want+the+Ring%22%0A%0Aprint(d%5B%22Sauron%22%5D%29%0A&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=3&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400}} В качестве ключа может выступать любой тип данных Питона: строка, число, список и т.д. Словарь можно создать и другим способом, прямо в момент объявления переменной: {{url>https://pt.nsunc.com/iframe-embed.html#code=d+%3D+%7B++++%0A++++%22Frodo%22+%3A+%22has+the+Ring%22,%0A++++%22Sauron%22+%3A+%22is+looking+for+the+Ring%22,%0A++++%22Gollum%22+%3A+%22lost+the+Ring%22,%0A++++%22Gandalf%22+%3A+%22does+not+want+the+Ring%22%0A++++%7D%0A%0Aprint(d%5B%22Sauron%22%5D%29%0A&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=3&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400}} Так как словарь это еще и коллекция (вместе с списками и другими представителями этого класса), в Питоне существует удобный способ перебора всех элементов: {{url>https://pt.nsunc.com/iframe-embed.html#code=d+%3D+%7B++++%0A++++%22Frodo%22+%3A+%22has+the+Ring%22,%0A++++%22Sauron%22+%3A+%22is+looking+for+the+Ring%22,%0A++++%22Gollum%22+%3A+%22lost+the+Ring%22,%0A++++%22Gandalf%22+%3A+%22does+not+want+the+Ring%22%0A++++%7D%0A++++%0Afor+key+in+d%3A%0A++++print(key+%2B+%22+%22+%2B+d%5Bkey%5D%29%0A++++%0A%23+or+even+easier%0A%0Afor+name,+state+in+d.items(%29%3A%0A++++print(name+%2B+%22+%22+%2B+state%29%0A&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=3&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400}} Лишнюю запись из словаря удалить можно с помощью функции del() {{url>https://pt.nsunc.com/iframe-embed.html#code=d+%3D+%7B++++%0A++++%22Frodo%22+%3A+%22has+the+Ring%22,%0A++++%22Sauron%22+%3A+%22is+looking+for+the+Ring%22,%0A++++%22Gollum%22+%3A+%22lost+the+Ring%22,%0A++++%22Gandalf%22+%3A+%22does+not+want+the+Ring%22%0A++++%7D%0A++++%0Adel(d%5B%22Gandalf%22%5D%29++++%0A%0Afor+name,+state+in+d.items(%29%3A%0A++++print(name+%2B+%22+%22+%2B+state%29%0A&origin=opt-frontend.js&cumulative=false&heapPrimitives=false&textReferences=false&py=3&rawInputLstJSON=%5B%5D&curInstr=0&codeDivWidth=350&codeDivHeight=400}} ====== Задача 6 ====== Скачайте следующие два файла. Напомню: щелкнуть по ссылке правой кнопкй, в меню выбрать "Сохранить объект как..." и выбрать куда сохранить файл. {{ :python:cities.txt |}} {{ :python:countries.txt |}} Файл countries.txt хранит список стран мира в формате номерстраны;названиестраны А файл cities.txt список городов, в чуть более сложном формате номергорода;номерстраны;названиегорода Напишите программу, которая сначала читает из файла список стран и сохраняет их в словарь с названием countries. После чего, читает файл со списком городов и по мере чтения выводит на экран строки вида В стране названиестраны есть город названиегорода. Например: В стране Венгрия есть город Сольнок **Подсказка 1**: Для решения задачи понадобится воспользоваться функцией split и вспомнить как работать с файлами [[python/week3#rabota_s_fajlami| (Вспомнить можно тут)]] **Подсказка 2**: Обратите особое внимене на количество столбцов в файле cities.txt и на их значение. {{ :python:week4_complete_data.ods |Дополнительные данные}}