[{"data":1,"prerenderedAt":1973},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fpython\u002Fst18":386,"\u002Fblog\u002Fpython\u002Fst18-surround":1968},[4],{"title":5,"path":6,"stem":7,"children":8,"page":114},"Blog","\u002Fblog","blog",[9,115,184,329],{"title":10,"path":11,"stem":12,"children":13,"page":114},"Ege","\u002Fblog\u002Fege","blog\u002Fege",[14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110],{"title":15,"path":16,"stem":17},"ЕГЭ Задание 1","\u002Fblog\u002Fege\u002Ftask1","blog\u002Fege\u002Ftask1",{"title":19,"path":20,"stem":21},"ЕГЭ Задание 10","\u002Fblog\u002Fege\u002Ftask10","blog\u002Fege\u002Ftask10",{"title":23,"path":24,"stem":25},"ЕГЭ Задание 11","\u002Fblog\u002Fege\u002Ftask11","blog\u002Fege\u002Ftask11",{"title":27,"path":28,"stem":29},"ЕГЭ Задание 12","\u002Fblog\u002Fege\u002Ftask12","blog\u002Fege\u002Ftask12",{"title":31,"path":32,"stem":33},"ЕГЭ Задание 13","\u002Fblog\u002Fege\u002Ftask13","blog\u002Fege\u002Ftask13",{"title":35,"path":36,"stem":37},"ЕГЭ Задание 14","\u002Fblog\u002Fege\u002Ftask14","blog\u002Fege\u002Ftask14",{"title":39,"path":40,"stem":41},"ЕГЭ Задание 15","\u002Fblog\u002Fege\u002Ftask15","blog\u002Fege\u002Ftask15",{"title":43,"path":44,"stem":45},"ЕГЭ Задание 16","\u002Fblog\u002Fege\u002Ftask16","blog\u002Fege\u002Ftask16",{"title":47,"path":48,"stem":49},"ЕГЭ Задание 17","\u002Fblog\u002Fege\u002Ftask17","blog\u002Fege\u002Ftask17",{"title":51,"path":52,"stem":53},"ЕГЭ Задание 18","\u002Fblog\u002Fege\u002Ftask18","blog\u002Fege\u002Ftask18",{"title":55,"path":56,"stem":57},"ЕГЭ Задание 19, 20, 21","\u002Fblog\u002Fege\u002Ftask19_20_21","blog\u002Fege\u002Ftask19_20_21",{"title":59,"path":60,"stem":61},"ЕГЭ Задание 2","\u002Fblog\u002Fege\u002Ftask2","blog\u002Fege\u002Ftask2",{"title":63,"path":64,"stem":65},"ЕГЭ Задание 22","\u002Fblog\u002Fege\u002Ftask22","blog\u002Fege\u002Ftask22",{"title":67,"path":68,"stem":69},"ЕГЭ Задание 23","\u002Fblog\u002Fege\u002Ftask23","blog\u002Fege\u002Ftask23",{"title":71,"path":72,"stem":73},"ЕГЭ Задание 24","\u002Fblog\u002Fege\u002Ftask24","blog\u002Fege\u002Ftask24",{"title":75,"path":76,"stem":77},"ЕГЭ Задание 25","\u002Fblog\u002Fege\u002Ftask25","blog\u002Fege\u002Ftask25",{"title":79,"path":80,"stem":81},"ЕГЭ Задание 26","\u002Fblog\u002Fege\u002Ftask26","blog\u002Fege\u002Ftask26",{"title":83,"path":84,"stem":85},"ЕГЭ Задание 27","\u002Fblog\u002Fege\u002Ftask27","blog\u002Fege\u002Ftask27",{"title":87,"path":88,"stem":89},"ЕГЭ Задание 3","\u002Fblog\u002Fege\u002Ftask3","blog\u002Fege\u002Ftask3",{"title":91,"path":92,"stem":93},"ЕГЭ Задание 4","\u002Fblog\u002Fege\u002Ftask4","blog\u002Fege\u002Ftask4",{"title":95,"path":96,"stem":97},"ЕГЭ Задание 5","\u002Fblog\u002Fege\u002Ftask5","blog\u002Fege\u002Ftask5",{"title":99,"path":100,"stem":101},"ЕГЭ Задание 6","\u002Fblog\u002Fege\u002Ftask6","blog\u002Fege\u002Ftask6",{"title":103,"path":104,"stem":105},"ЕГЭ Задание 7","\u002Fblog\u002Fege\u002Ftask7","blog\u002Fege\u002Ftask7",{"title":107,"path":108,"stem":109},"ЕГЭ Задание 8","\u002Fblog\u002Fege\u002Ftask8","blog\u002Fege\u002Ftask8",{"title":111,"path":112,"stem":113},"ЕГЭ Задание 9","\u002Fblog\u002Fege\u002Ftask9","blog\u002Fege\u002Ftask9",false,{"title":116,"path":117,"stem":118,"children":119,"page":114},"Oge","\u002Fblog\u002Foge","blog\u002Foge",[120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180],{"title":121,"path":122,"stem":123},"ОГЭ Задание 1","\u002Fblog\u002Foge\u002Ftask1","blog\u002Foge\u002Ftask1",{"title":125,"path":126,"stem":127},"ОГЭ Задание 10","\u002Fblog\u002Foge\u002Ftask10","blog\u002Foge\u002Ftask10",{"title":129,"path":130,"stem":131},"ОГЭ Задание 11","\u002Fblog\u002Foge\u002Ftask11","blog\u002Foge\u002Ftask11",{"title":133,"path":134,"stem":135},"ОГЭ Задание 12","\u002Fblog\u002Foge\u002Ftask12","blog\u002Foge\u002Ftask12",{"title":137,"path":138,"stem":139},"ОГЭ Задание 13","\u002Fblog\u002Foge\u002Ftask13","blog\u002Foge\u002Ftask13",{"title":141,"path":142,"stem":143},"ОГЭ Задание 14","\u002Fblog\u002Foge\u002Ftask14","blog\u002Foge\u002Ftask14",{"title":145,"path":146,"stem":147},"ОГЭ Задание 15","\u002Fblog\u002Foge\u002Ftask15","blog\u002Foge\u002Ftask15",{"title":149,"path":150,"stem":151},"ОГЭ Задание 16","\u002Fblog\u002Foge\u002Ftask16","blog\u002Foge\u002Ftask16",{"title":153,"path":154,"stem":155},"ОГЭ Задание 2","\u002Fblog\u002Foge\u002Ftask2","blog\u002Foge\u002Ftask2",{"title":157,"path":158,"stem":159},"ОГЭ Задание 3","\u002Fblog\u002Foge\u002Ftask3","blog\u002Foge\u002Ftask3",{"title":161,"path":162,"stem":163},"ОГЭ Задание 4","\u002Fblog\u002Foge\u002Ftask4","blog\u002Foge\u002Ftask4",{"title":165,"path":166,"stem":167},"ОГЭ Задание 5","\u002Fblog\u002Foge\u002Ftask5","blog\u002Foge\u002Ftask5",{"title":169,"path":170,"stem":171},"ОГЭ Задание 6","\u002Fblog\u002Foge\u002Ftask6","blog\u002Foge\u002Ftask6",{"title":173,"path":174,"stem":175},"ОГЭ Задание 7","\u002Fblog\u002Foge\u002Ftask7","blog\u002Foge\u002Ftask7",{"title":177,"path":178,"stem":179},"ОГЭ Задание 8","\u002Fblog\u002Foge\u002Ftask8","blog\u002Foge\u002Ftask8",{"title":181,"path":182,"stem":183},"ОГЭ Задание 9","\u002Fblog\u002Foge\u002Ftask9","blog\u002Foge\u002Ftask9",{"title":185,"path":186,"stem":187,"children":188,"page":114},"Python","\u002Fblog\u002Fpython","blog\u002Fpython",[189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325],{"title":190,"path":191,"stem":192},"Знакомство с синтаксисом","\u002Fblog\u002Fpython\u002Fst1","blog\u002Fpython\u002Fst1",{"title":194,"path":195,"stem":196},"Отладка","\u002Fblog\u002Fpython\u002Fst10","blog\u002Fpython\u002Fst10",{"title":198,"path":199,"stem":200},"Модули и пакеты","\u002Fblog\u002Fpython\u002Fst11","blog\u002Fpython\u002Fst11",{"title":202,"path":203,"stem":204},"Кортежи","\u002Fblog\u002Fpython\u002Fst12","blog\u002Fpython\u002Fst12",{"title":206,"path":207,"stem":208},"Знакомство со списками","\u002Fblog\u002Fpython\u002Fst13","blog\u002Fpython\u002Fst13",{"title":210,"path":211,"stem":212},"Списки и циклы","\u002Fblog\u002Fpython\u002Fst14","blog\u002Fpython\u002Fst14",{"title":214,"path":215,"stem":216},"Использование списков ч.1","\u002Fblog\u002Fpython\u002Fst15","blog\u002Fpython\u002Fst15",{"title":218,"path":219,"stem":220},"Использование списков ч.2","\u002Fblog\u002Fpython\u002Fst16","blog\u002Fpython\u002Fst16",{"title":222,"path":223,"stem":224},"Использование списков ч.3","\u002Fblog\u002Fpython\u002Fst17","blog\u002Fpython\u002Fst17",{"title":226,"path":227,"stem":228},"Словари","\u002Fblog\u002Fpython\u002Fst18","blog\u002Fpython\u002Fst18",{"title":230,"path":231,"stem":232},"Множества","\u002Fblog\u002Fpython\u002Fst19","blog\u002Fpython\u002Fst19",{"title":234,"path":235,"stem":236},"Переменные","\u002Fblog\u002Fpython\u002Fst2","blog\u002Fpython\u002Fst2",{"title":238,"path":239,"stem":240},"Хеш-таблицы","\u002Fblog\u002Fpython\u002Fst20","blog\u002Fpython\u002Fst20",{"title":242,"path":243,"stem":244},"Решето Эратосфена","\u002Fblog\u002Fpython\u002Fst21","blog\u002Fpython\u002Fst21",{"title":246,"path":247,"stem":248},"Длинная арифметика","\u002Fblog\u002Fpython\u002Fst22","blog\u002Fpython\u002Fst22",{"title":250,"path":251,"stem":252},"Декораторы функций","\u002Fblog\u002Fpython\u002Fst23","blog\u002Fpython\u002Fst23",{"title":254,"path":255,"stem":256},"Знакомство с алгоритмами","\u002Fblog\u002Fpython\u002Fst24","blog\u002Fpython\u002Fst24",{"title":258,"path":259,"stem":260},"Бинарный поиск – примеры задач","\u002Fblog\u002Fpython\u002Fst25","blog\u002Fpython\u002Fst25",{"title":262,"path":263,"stem":264},"Сортировка выбором","\u002Fblog\u002Fpython\u002Fst26","blog\u002Fpython\u002Fst26",{"title":266,"path":267,"stem":268},"Рекурсия и стек","\u002Fblog\u002Fpython\u002Fst27","blog\u002Fpython\u002Fst27",{"title":270,"path":271,"stem":272},"Быстрая сортировка","\u002Fblog\u002Fpython\u002Fst28","blog\u002Fpython\u002Fst28",{"title":274,"path":275,"stem":276},"Поиск в ширину","\u002Fblog\u002Fpython\u002Fst29","blog\u002Fpython\u002Fst29",{"title":278,"path":279,"stem":280},"Работа со строками","\u002Fblog\u002Fpython\u002Fst3","blog\u002Fpython\u002Fst3",{"title":282,"path":283,"stem":284},"Поиск в глубину","\u002Fblog\u002Fpython\u002Fst30","blog\u002Fpython\u002Fst30",{"title":286,"path":287,"stem":288},"Сбалансированные деревья","\u002Fblog\u002Fpython\u002Fst31","blog\u002Fpython\u002Fst31",{"title":290,"path":291,"stem":292},"Алгоритм Дейкстры","\u002Fblog\u002Fpython\u002Fst32","blog\u002Fpython\u002Fst32",{"title":294,"path":295,"stem":296},"Жадные алгоритмы","\u002Fblog\u002Fpython\u002Fst33","blog\u002Fpython\u002Fst33",{"title":298,"path":299,"stem":300},"Динамическое программирование","\u002Fblog\u002Fpython\u002Fst34","blog\u002Fpython\u002Fst34",{"title":302,"path":303,"stem":304},"Алгоритм k ближайших соседей","\u002Fblog\u002Fpython\u002Fst35","blog\u002Fpython\u002Fst35",{"title":306,"path":307,"stem":308},"Типы данных","\u002Fblog\u002Fpython\u002Fst4","blog\u002Fpython\u002Fst4",{"title":310,"path":311,"stem":312},"О функциях","\u002Fblog\u002Fpython\u002Fst5","blog\u002Fpython\u002Fst5",{"title":314,"path":315,"stem":316},"Свойства и методы","\u002Fblog\u002Fpython\u002Fst6","blog\u002Fpython\u002Fst6",{"title":318,"path":319,"stem":320},"Определение функций","\u002Fblog\u002Fpython\u002Fst7","blog\u002Fpython\u002Fst7",{"title":322,"path":323,"stem":324},"Логика","\u002Fblog\u002Fpython\u002Fst8","blog\u002Fpython\u002Fst8",{"title":326,"path":327,"stem":328},"Циклы","\u002Fblog\u002Fpython\u002Fst9","blog\u002Fpython\u002Fst9",{"title":330,"path":331,"stem":332,"children":333,"page":114},"Toi","\u002Fblog\u002Ftoi","blog\u002Ftoi",[334,338,342,346,350,354,358,362,366,370,374,378,382],{"title":335,"path":336,"stem":337},"Информация и информационные процессы","\u002Fblog\u002Ftoi\u002Fst1","blog\u002Ftoi\u002Fst1",{"title":339,"path":340,"stem":341},"Электронные таблицы","\u002Fblog\u002Ftoi\u002Fst10","blog\u002Ftoi\u002Fst10",{"title":343,"path":344,"stem":345},"Система, её свойства и компоненты. Моделирование","\u002Fblog\u002Ftoi\u002Fst11","blog\u002Ftoi\u002Fst11",{"title":347,"path":348,"stem":349},"Представление информации в компьютере","\u002Fblog\u002Ftoi\u002Fst12","blog\u002Ftoi\u002Fst12",{"title":351,"path":352,"stem":353},"Средства информационно-коммуникационных технологий. Файловая система","\u002Fblog\u002Ftoi\u002Fst13","blog\u002Ftoi\u002Fst13",{"title":355,"path":356,"stem":357},"Комбинаторика","\u002Fblog\u002Ftoi\u002Fst2","blog\u002Ftoi\u002Fst2",{"title":359,"path":360,"stem":361},"Адресация в интернете","\u002Fblog\u002Ftoi\u002Fst3","blog\u002Ftoi\u002Fst3",{"title":363,"path":364,"stem":365},"Измерение количества информации","\u002Fblog\u002Ftoi\u002Fst4","blog\u002Ftoi\u002Fst4",{"title":367,"path":368,"stem":369},"Системы счисления","\u002Fblog\u002Ftoi\u002Fst5","blog\u002Ftoi\u002Fst5",{"title":371,"path":372,"stem":373},"Диаграммы Эйлера — Венна","\u002Fblog\u002Ftoi\u002Fst6","blog\u002Ftoi\u002Fst6",{"title":375,"path":376,"stem":377},"Условие Фано","\u002Fblog\u002Ftoi\u002Fst7","blog\u002Ftoi\u002Fst7",{"title":379,"path":380,"stem":381},"Теория графов","\u002Fblog\u002Ftoi\u002Fst8","blog\u002Ftoi\u002Fst8",{"title":383,"path":384,"stem":385},"Алгебра логики","\u002Fblog\u002Ftoi\u002Fst9","blog\u002Ftoi\u002Fst9",{"id":387,"title":226,"author":388,"body":393,"date":1960,"description":1961,"extension":1962,"image":1963,"meta":1964,"minRead":1965,"navigation":1784,"num":1965,"path":227,"seo":1966,"stem":228,"__hash__":1967},"python\u002Fblog\u002Fpython\u002Fst18.md",{"name":389,"avatar":390},"Штана Альберт Игоревич",{"src":391,"alt":392},"me.jpg","@ashtana",{"type":394,"value":395,"toc":1939},"minimark",[396,401,406,410,417,546,549,577,582,589,620,623,626,655,658,689,696,741,749,753,756,812,818,851,857,888,894,940,944,951,1028,1031,1035,1038,1101,1108,1169,1179,1215,1218,1228,1232,1246,1254,1257,1331,1334,1338,1341,1349,1356,1460,1471,1475,1485,1492,1527,1531,1534,1575,1581,1584,1589,1598,1603,1610,1626,1704,1716,1726,1745,1765,1854,1861,1870,1873,1876,1879,1882,1885,1888,1896,1906,1921,1932,1935],[397,398,400],"h2",{"id":399},"использование-словарей","Использование словарей",[402,403,405],"h3",{"id":404},"синтаксис","Синтаксис",[407,408,409],"p",{},"Как и другие встроенные коллекции, словари поддерживаются языком и имеют собственный синтаксис для описания литералов.",[407,411,412,416],{},[413,414,415],"em",{},"Литерал словаря"," записывается в фигурных скобках.\nПары «ключ-значение» разделяются запятыми, а ключ отделяется от значения двоеточием:",[418,419,424],"pre",{"className":420,"code":421,"language":422,"meta":423,"style":423},"language-python shiki shiki-themes github-light","dictionary = {\n    \"one\": \"1\",\n    \"two\": 2,\n    \"items\": {1: \"apple\", 2: \"orange\", 3: \"grape\"},\n    True: \"Python\n    \",\n}\ndictionary  # {'one': '1', 'two': 2, 'items': {1: 'apple', 2: 'orange', 3: 'grape'}, True: 'Python'}\n","python","",[425,426,427,443,459,473,513,524,530,536],"code",{"__ignoreMap":423},[428,429,432,436,440],"span",{"class":430,"line":431},"line",1,[428,433,435],{"class":434},"sgsFI","dictionary ",[428,437,439],{"class":438},"sD7c4","=",[428,441,442],{"class":434}," {\n",[428,444,446,450,453,456],{"class":430,"line":445},2,[428,447,449],{"class":448},"sYBdl","    \"one\"",[428,451,452],{"class":434},": ",[428,454,455],{"class":448},"\"1\"",[428,457,458],{"class":434},",\n",[428,460,462,465,467,471],{"class":430,"line":461},3,[428,463,464],{"class":448},"    \"two\"",[428,466,452],{"class":434},[428,468,470],{"class":469},"sYu0t","2",[428,472,458],{"class":434},[428,474,476,479,482,485,487,490,493,495,497,500,502,505,507,510],{"class":430,"line":475},4,[428,477,478],{"class":448},"    \"items\"",[428,480,481],{"class":434},": {",[428,483,484],{"class":469},"1",[428,486,452],{"class":434},[428,488,489],{"class":448},"\"apple\"",[428,491,492],{"class":434},", ",[428,494,470],{"class":469},[428,496,452],{"class":434},[428,498,499],{"class":448},"\"orange\"",[428,501,492],{"class":434},[428,503,504],{"class":469},"3",[428,506,452],{"class":434},[428,508,509],{"class":448},"\"grape\"",[428,511,512],{"class":434},"},\n",[428,514,516,519,521],{"class":430,"line":515},5,[428,517,518],{"class":469},"    True",[428,520,452],{"class":434},[428,522,523],{"class":448},"\"Python\n",[428,525,527],{"class":430,"line":526},6,[428,528,529],{"class":448},"    \",\n",[428,531,533],{"class":430,"line":532},7,[428,534,535],{"class":434},"}\n",[428,537,539,542],{"class":430,"line":538},8,[428,540,541],{"class":434},"dictionary  ",[428,543,545],{"class":544},"sAwPA","# {'one': '1', 'two': 2, 'items': {1: 'apple', 2: 'orange', 3: 'grape'}, True: 'Python'}\n",[407,547,548],{},"В этом примере есть и ключи-строки, и ключи-числа, и вложенные словари.\nИ конечно же, здесь есть переменные, которые могут выступать в роли значений и ключей:",[418,550,552],{"className":420,"code":551,"language":422,"meta":423,"style":423},"key, val = \"x\", 3\n{key: val}  # {'x': 3}\n",[425,553,554,569],{"__ignoreMap":423},[428,555,556,559,561,564,566],{"class":430,"line":431},[428,557,558],{"class":434},"key, val ",[428,560,439],{"class":438},[428,562,563],{"class":448}," \"x\"",[428,565,492],{"class":434},[428,567,568],{"class":469},"3\n",[428,570,571,574],{"class":430,"line":445},[428,572,573],{"class":434},"{key: val}  ",[428,575,576],{"class":544},"# {'x': 3}\n",[578,579,581],"h4",{"id":580},"доступ-по-ключу","Доступ по ключу",[407,583,584,585,588],{},"Выше мы объявили словарь ",[425,586,587],{},"dictionary",". Запросить у него значение по ключу можно так:",[418,590,592],{"className":420,"code":591,"language":422,"meta":423,"style":423},"dictionary[\"two\"]  # 2\ndictionary[\"four\"]  # KeyError: 'four'\n",[425,593,594,608],{"__ignoreMap":423},[428,595,596,599,602,605],{"class":430,"line":431},[428,597,598],{"class":434},"dictionary[",[428,600,601],{"class":448},"\"two\"",[428,603,604],{"class":434},"]  ",[428,606,607],{"class":544},"# 2\n",[428,609,610,612,615,617],{"class":430,"line":445},[428,611,598],{"class":434},[428,613,614],{"class":448},"\"four\"",[428,616,604],{"class":434},[428,618,619],{"class":544},"# KeyError: 'four'\n",[407,621,622],{},"Ключа \"four\" в dictionary нет, поэтому выбросилось исключение KeyError — аналог IndexError для списков.",[407,624,625],{},"Проверить наличие ключа в словаре можно с помощью привычного оператора in:",[418,627,629],{"className":420,"code":628,"language":422,"meta":423,"style":423},"\"two\" in dictionary  # True\n\"four\" in dictionary  # False\n",[425,630,631,644],{"__ignoreMap":423},[428,632,633,635,638,641],{"class":430,"line":431},[428,634,601],{"class":448},[428,636,637],{"class":438}," in",[428,639,640],{"class":434}," dictionary  ",[428,642,643],{"class":544},"# True\n",[428,645,646,648,650,652],{"class":430,"line":445},[428,647,614],{"class":448},[428,649,637],{"class":438},[428,651,640],{"class":434},[428,653,654],{"class":544},"# False\n",[407,656,657],{},"Если вы захотите получить значение по ключу, которого может и не быть, можно сделать это так:",[418,659,661],{"className":420,"code":660,"language":422,"meta":423,"style":423},"dictionary[\"four\"] if \"four\" in dictionary else None\n",[425,662,663],{"__ignoreMap":423},[428,664,665,667,669,672,675,678,680,683,686],{"class":430,"line":431},[428,666,598],{"class":434},[428,668,614],{"class":448},[428,670,671],{"class":434},"] ",[428,673,674],{"class":438},"if",[428,676,677],{"class":448}," \"four\"",[428,679,637],{"class":438},[428,681,682],{"class":434}," dictionary ",[428,684,685],{"class":438},"else",[428,687,688],{"class":469}," None\n",[407,690,691,692,695],{},"Подобный безопасный запрос элементов нужен довольно часто.\nПоэтому объект словаря имеет для этого специальный метод ",[425,693,694],{},".get",":",[418,697,699],{"className":420,"code":698,"language":422,"meta":423,"style":423},"dictionary.get(\"two\")  # 42\ndictionary.get(\"four\")  # Вернет None\ndictionary.get(\"four\", \"no such key\")  # 'no such key'\n",[425,700,701,714,725],{"__ignoreMap":423},[428,702,703,706,708,711],{"class":430,"line":431},[428,704,705],{"class":434},"dictionary.get(",[428,707,601],{"class":448},[428,709,710],{"class":434},")  ",[428,712,713],{"class":544},"# 42\n",[428,715,716,718,720,722],{"class":430,"line":445},[428,717,705],{"class":434},[428,719,614],{"class":448},[428,721,710],{"class":434},[428,723,724],{"class":544},"# Вернет None\n",[428,726,727,729,731,733,736,738],{"class":430,"line":461},[428,728,705],{"class":434},[428,730,614],{"class":448},[428,732,492],{"class":434},[428,734,735],{"class":448},"\"no such key\"",[428,737,710],{"class":434},[428,739,740],{"class":544},"# 'no such key'\n",[407,742,743,744,748],{},"Третий вызов метода показывает, как можно явно задать значение по умолчанию.\nЕсли его не указывать, метод вернет ",[745,746,747],"strong",{},"None"," при отсутствии значения по указанному ключу.",[578,750,752],{"id":751},"методы-keys-values-и-items","Методы keys, values и items",[407,754,755],{},"Если попробовать проитерировать словарь, то мы получим перечень ключей:",[418,757,759],{"className":420,"code":758,"language":422,"meta":423,"style":423},"for k in {\"a\": 1, \"b\": 2}:\n    print(k)\n# => a\n# => b\n",[425,760,761,794,802,807],{"__ignoreMap":423},[428,762,763,766,769,772,775,778,780,782,784,787,789,791],{"class":430,"line":431},[428,764,765],{"class":438},"for",[428,767,768],{"class":434}," k ",[428,770,771],{"class":438},"in",[428,773,774],{"class":434}," {",[428,776,777],{"class":448},"\"a\"",[428,779,452],{"class":434},[428,781,484],{"class":469},[428,783,492],{"class":434},[428,785,786],{"class":448},"\"b\"",[428,788,452],{"class":434},[428,790,470],{"class":469},[428,792,793],{"class":434},"}:\n",[428,795,796,799],{"class":430,"line":445},[428,797,798],{"class":469},"    print",[428,800,801],{"class":434},"(k)\n",[428,803,804],{"class":430,"line":461},[428,805,806],{"class":544},"# => a\n",[428,808,809],{"class":430,"line":475},[428,810,811],{"class":544},"# => b\n",[407,813,814,815,695],{},"Этого же результата можно добиться и более явно. Для этого нужно вызвать метод ",[425,816,817],{},".keys()",[418,819,821],{"className":420,"code":820,"language":422,"meta":423,"style":423},"print({\"a\": 1, \"b\": 2}.keys())  # dict_keys(['a', 'b'])\n",[425,822,823],{"__ignoreMap":423},[428,824,825,828,831,833,835,837,839,841,843,845,848],{"class":430,"line":431},[428,826,827],{"class":469},"print",[428,829,830],{"class":434},"({",[428,832,777],{"class":448},[428,834,452],{"class":434},[428,836,484],{"class":469},[428,838,492],{"class":434},[428,840,786],{"class":448},[428,842,452],{"class":434},[428,844,470],{"class":469},[428,846,847],{"class":434},"}.keys())  ",[428,849,850],{"class":544},"# dict_keys(['a', 'b'])\n",[407,852,853,854,695],{},"Чтобы получить значения, нужно вызвать метод ",[425,855,856],{},".values()",[418,858,860],{"className":420,"code":859,"language":422,"meta":423,"style":423},"print({\"a\": 1, \"b\": 2}.values())  # dict_values([1, 2])\n",[425,861,862],{"__ignoreMap":423},[428,863,864,866,868,870,872,874,876,878,880,882,885],{"class":430,"line":431},[428,865,827],{"class":469},[428,867,830],{"class":434},[428,869,777],{"class":448},[428,871,452],{"class":434},[428,873,484],{"class":469},[428,875,492],{"class":434},[428,877,786],{"class":448},[428,879,452],{"class":434},[428,881,470],{"class":469},[428,883,884],{"class":434},"}.values())  ",[428,886,887],{"class":544},"# dict_values([1, 2])\n",[407,889,890,891,695],{},"Чтобы получить одновременно и ключи, и соответствующие значения, можно вызвать метод ",[425,892,893],{},".items()",[418,895,897],{"className":420,"code":896,"language":422,"meta":423,"style":423},"for k, v in {\"a\": 1, \"b\": 2}.items():\n    print(k, \"=\", v)\n",[425,898,899,927],{"__ignoreMap":423},[428,900,901,903,906,908,910,912,914,916,918,920,922,924],{"class":430,"line":431},[428,902,765],{"class":438},[428,904,905],{"class":434}," k, v ",[428,907,771],{"class":438},[428,909,774],{"class":434},[428,911,777],{"class":448},[428,913,452],{"class":434},[428,915,484],{"class":469},[428,917,492],{"class":434},[428,919,786],{"class":448},[428,921,452],{"class":434},[428,923,470],{"class":469},[428,925,926],{"class":434},"}.items():\n",[428,928,929,931,934,937],{"class":430,"line":445},[428,930,798],{"class":469},[428,932,933],{"class":434},"(k, ",[428,935,936],{"class":448},"\"=\"",[428,938,939],{"class":434},", v)\n",[402,941,943],{"id":942},"изменение-данных-в-словаре","Изменение данных в словаре",[407,945,946,947,950],{},"Словарь в Python — изменяемый или mutable.\nНо для добавления новой пары «ключ-значение» не нужны отдельные методы, вроде спискового метода ",[425,948,949],{},".append"," — достаточно обычного присваивания:",[418,952,954],{"className":420,"code":953,"language":422,"meta":423,"style":423},"d = {}  # пустой словарь\nd[\"a\"] = 1\nprint(d)  # => {\"a\": 1}\nd[\"b\"] = 2\nd[\"a\"] = 0\nprint(d)  # => {\"a\": 0, \"b\": 2}\n",[425,955,956,969,983,993,1006,1019],{"__ignoreMap":423},[428,957,958,961,963,966],{"class":430,"line":431},[428,959,960],{"class":434},"d ",[428,962,439],{"class":438},[428,964,965],{"class":434}," {}  ",[428,967,968],{"class":544},"# пустой словарь\n",[428,970,971,974,976,978,980],{"class":430,"line":445},[428,972,973],{"class":434},"d[",[428,975,777],{"class":448},[428,977,671],{"class":434},[428,979,439],{"class":438},[428,981,982],{"class":469}," 1\n",[428,984,985,987,990],{"class":430,"line":461},[428,986,827],{"class":469},[428,988,989],{"class":434},"(d)  ",[428,991,992],{"class":544},"# => {\"a\": 1}\n",[428,994,995,997,999,1001,1003],{"class":430,"line":475},[428,996,973],{"class":434},[428,998,786],{"class":448},[428,1000,671],{"class":434},[428,1002,439],{"class":438},[428,1004,1005],{"class":469}," 2\n",[428,1007,1008,1010,1012,1014,1016],{"class":430,"line":515},[428,1009,973],{"class":434},[428,1011,777],{"class":448},[428,1013,671],{"class":434},[428,1015,439],{"class":438},[428,1017,1018],{"class":469}," 0\n",[428,1020,1021,1023,1025],{"class":430,"line":526},[428,1022,827],{"class":469},[428,1024,989],{"class":434},[428,1026,1027],{"class":544},"# => {\"a\": 0, \"b\": 2}\n",[407,1029,1030],{},"Здесь вы можете увидеть, что присваивание значения новому ключу выглядит точно так же, как и присваивание существующему.",[578,1032,1034],{"id":1033},"метод-pop","Метод pop",[407,1036,1037],{},"Удаление элементов из словаря можно сделать с помощью метода pop — в этом словарь уже больше похож на список.\nТолько вместо индекса используется ключ:",[418,1039,1041],{"className":420,"code":1040,"language":422,"meta":423,"style":423},"d = {\"a\": 0, \"b\": 2}\nd.pop(\"a\")  # 0\nprint(d)  # {\"b\": 2}\nd.pop(\"c\")  # KeyError: \"c\"\n",[425,1042,1043,1068,1080,1089],{"__ignoreMap":423},[428,1044,1045,1047,1049,1051,1053,1055,1058,1060,1062,1064,1066],{"class":430,"line":431},[428,1046,960],{"class":434},[428,1048,439],{"class":438},[428,1050,774],{"class":434},[428,1052,777],{"class":448},[428,1054,452],{"class":434},[428,1056,1057],{"class":469},"0",[428,1059,492],{"class":434},[428,1061,786],{"class":448},[428,1063,452],{"class":434},[428,1065,470],{"class":469},[428,1067,535],{"class":434},[428,1069,1070,1073,1075,1077],{"class":430,"line":445},[428,1071,1072],{"class":434},"d.pop(",[428,1074,777],{"class":448},[428,1076,710],{"class":434},[428,1078,1079],{"class":544},"# 0\n",[428,1081,1082,1084,1086],{"class":430,"line":461},[428,1083,827],{"class":469},[428,1085,989],{"class":434},[428,1087,1088],{"class":544},"# {\"b\": 2}\n",[428,1090,1091,1093,1096,1098],{"class":430,"line":475},[428,1092,1072],{"class":434},[428,1094,1095],{"class":448},"\"c\"",[428,1097,710],{"class":434},[428,1099,1100],{"class":544},"# KeyError: \"c\"\n",[407,1102,1103,1104,1107],{},"Этот пример показывает, что будет, если попытаться извлечь значение по несуществующему ключу — мы получим исключение.\nОднако метод ",[425,1105,1106],{},"pop"," можно вызывать с указанием значения по умолчанию.\nВ этом случае при отсутствии ключа в словаре будет возвращено это самое значение, а исключение \"выброшено\" не будет:",[418,1109,1111],{"className":420,"code":1110,"language":422,"meta":423,"style":423},"d = {\"a\": 1, \"b\": 2}\nd.pop(\"3\", None)  # None\nd.pop(\"3\", 33)  # 33\n",[425,1112,1113,1137,1153],{"__ignoreMap":423},[428,1114,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135],{"class":430,"line":431},[428,1116,960],{"class":434},[428,1118,439],{"class":438},[428,1120,774],{"class":434},[428,1122,777],{"class":448},[428,1124,452],{"class":434},[428,1126,484],{"class":469},[428,1128,492],{"class":434},[428,1130,786],{"class":448},[428,1132,452],{"class":434},[428,1134,470],{"class":469},[428,1136,535],{"class":434},[428,1138,1139,1141,1144,1146,1148,1150],{"class":430,"line":445},[428,1140,1072],{"class":434},[428,1142,1143],{"class":448},"\"3\"",[428,1145,492],{"class":434},[428,1147,747],{"class":469},[428,1149,710],{"class":434},[428,1151,1152],{"class":544},"# None\n",[428,1154,1155,1157,1159,1161,1164,1166],{"class":430,"line":461},[428,1156,1072],{"class":434},[428,1158,1143],{"class":448},[428,1160,492],{"class":434},[428,1162,1163],{"class":469},"33",[428,1165,710],{"class":434},[428,1167,1168],{"class":544},"# 33\n",[407,1170,1171,1172,1174,1175,1178],{},"Аналогом спискового ",[425,1173,1106],{}," без аргументов для словаря служит метод ",[425,1176,1177],{},"popitem",".\nЭтот метод извлекает ключ и значение в виде кортежа, а если словарь уже пуст, то \"выбрасывает\" исключение:",[418,1180,1182],{"className":420,"code":1181,"language":422,"meta":423,"style":423},"d = {\"a\": 1}\nd.popitem()  # (\"a\", 1)\nd.popitem()  # KeyError: \"popitem(): dictionary is empty\"\n",[425,1183,1184,1200,1208],{"__ignoreMap":423},[428,1185,1186,1188,1190,1192,1194,1196,1198],{"class":430,"line":431},[428,1187,960],{"class":434},[428,1189,439],{"class":438},[428,1191,774],{"class":434},[428,1193,777],{"class":448},[428,1195,452],{"class":434},[428,1197,484],{"class":469},[428,1199,535],{"class":434},[428,1201,1202,1205],{"class":430,"line":445},[428,1203,1204],{"class":434},"d.popitem()  ",[428,1206,1207],{"class":544},"# (\"a\", 1)\n",[428,1209,1210,1212],{"class":430,"line":461},[428,1211,1204],{"class":434},[428,1213,1214],{"class":544},"# KeyError: \"popitem(): dictionary is empty\"\n",[407,1216,1217],{},"В Python, начиная с версии 3.7, гарантирован порядок LIFO - Last In First Out.\nЭто значит, что пары будут извлекаться в порядке обратном добавлению, то есть последняя добавленная пара, будет извлечена первой.\nПри этом мы можем быть уверены в том, что:",[1219,1220,1221,1225],"ul",{},[1222,1223,1224],"li",{},"Все пары будут извлечены",[1222,1226,1227],{},"Каждая пара будет извлечена строго один раз",[578,1229,1231],{"id":1230},"дополнение-одного-словаря-другим","Дополнение одного словаря другим",[407,1233,1234,1235,1238,1239,1242,1243,1245],{},"У списка есть метод ",[425,1236,1237],{},"extend",", который расширяет один список другим.\nУ словаря есть похожий по смыслу метод ",[425,1240,1241],{},"update",".\nНо при вызове ",[425,1244,1241],{}," ассоциированный объект словаря не просто получает пары «ключ-значение» из нового словаря.\nПроисходит именно обновление данных — поэтому метод и называется update. Работает это так:",[1219,1247,1248,1251],{},[1222,1249,1250],{},"Новые ключи дописываются в словарь",[1222,1252,1253],{},"Если какие-то ключи уже существовали до этого, то связанные с ними значения будут заменены новыми",[407,1255,1256],{},"Так это выглядит в коде:",[418,1258,1260],{"className":420,"code":1259,"language":422,"meta":423,"style":423},"cart = {\"apples\": 5, \"oranges\": 7}\naddon = {\"oranges\": 4, \"lemons\": 2}\ncart.update(addon)\ncart  # {\"apples\": 5, \"oranges\": 4, \"lemons\": 2}\n",[425,1261,1262,1291,1318,1323],{"__ignoreMap":423},[428,1263,1264,1267,1269,1271,1274,1276,1279,1281,1284,1286,1289],{"class":430,"line":431},[428,1265,1266],{"class":434},"cart ",[428,1268,439],{"class":438},[428,1270,774],{"class":434},[428,1272,1273],{"class":448},"\"apples\"",[428,1275,452],{"class":434},[428,1277,1278],{"class":469},"5",[428,1280,492],{"class":434},[428,1282,1283],{"class":448},"\"oranges\"",[428,1285,452],{"class":434},[428,1287,1288],{"class":469},"7",[428,1290,535],{"class":434},[428,1292,1293,1296,1298,1300,1302,1304,1307,1309,1312,1314,1316],{"class":430,"line":445},[428,1294,1295],{"class":434},"addon ",[428,1297,439],{"class":438},[428,1299,774],{"class":434},[428,1301,1283],{"class":448},[428,1303,452],{"class":434},[428,1305,1306],{"class":469},"4",[428,1308,492],{"class":434},[428,1310,1311],{"class":448},"\"lemons\"",[428,1313,452],{"class":434},[428,1315,470],{"class":469},[428,1317,535],{"class":434},[428,1319,1320],{"class":430,"line":461},[428,1321,1322],{"class":434},"cart.update(addon)\n",[428,1324,1325,1328],{"class":430,"line":475},[428,1326,1327],{"class":434},"cart  ",[428,1329,1330],{"class":544},"# {\"apples\": 5, \"oranges\": 4, \"lemons\": 2}\n",[407,1332,1333],{},"В коде выше мы добавили лимоны и обновили количество апельсинов.",[578,1335,1337],{"id":1336},"копирование-словаря","Копирование словаря",[407,1339,1340],{},"В случае списков мы можем сложить два списка двумя способами:",[1219,1342,1343,1346],{},[1222,1344,1345],{},"Просто сложить с помощью оператора + два списка и получить новый",[1222,1347,1348],{},"Сделать копию одного списка и дополнить ее данными из второго",[407,1350,1351,1352,1355],{},"Но словари нельзя складывать, да и срезы словари тоже не поддерживают.\nЗато у словаря есть метод ",[425,1353,1354],{},"copy",".\nОн работает как копирование списка с помощью среза [:] — при вызове он возвращает поверхностную копию из словаря.\nТак же ее называют «неглубокой копией» или shallow copy.\nПоверхностная копия воспроизводит только структуру словаря: не копирует значения, а только создает на них новые ссылки.\nТем не менее поверхностная копия — это новый словарь, который может изменять свой состав, не влияя на оригинал:",[418,1357,1359],{"className":420,"code":1358,"language":422,"meta":423,"style":423},"d = {\"a\": 1, \"b\": [2]}\nc = d.copy()\nc.update({\"a\": 10, \"1k\": 1000})\nc  # {'a': 10, 'b': [2], '1k': 1000}\nc[\"b\"].append(None)\nc  # {'a': 10, 'b': [2, None], '1k': 1000}\nd  # {'a': 1, 'b': [2, None]}\n",[425,1360,1361,1387,1397,1422,1430,1445,1452],{"__ignoreMap":423},[428,1362,1363,1365,1367,1369,1371,1373,1375,1377,1379,1382,1384],{"class":430,"line":431},[428,1364,960],{"class":434},[428,1366,439],{"class":438},[428,1368,774],{"class":434},[428,1370,777],{"class":448},[428,1372,452],{"class":434},[428,1374,484],{"class":469},[428,1376,492],{"class":434},[428,1378,786],{"class":448},[428,1380,1381],{"class":434},": [",[428,1383,470],{"class":469},[428,1385,1386],{"class":434},"]}\n",[428,1388,1389,1392,1394],{"class":430,"line":445},[428,1390,1391],{"class":434},"c ",[428,1393,439],{"class":438},[428,1395,1396],{"class":434}," d.copy()\n",[428,1398,1399,1402,1404,1406,1409,1411,1414,1416,1419],{"class":430,"line":461},[428,1400,1401],{"class":434},"c.update({",[428,1403,777],{"class":448},[428,1405,452],{"class":434},[428,1407,1408],{"class":469},"10",[428,1410,492],{"class":434},[428,1412,1413],{"class":448},"\"1k\"",[428,1415,452],{"class":434},[428,1417,1418],{"class":469},"1000",[428,1420,1421],{"class":434},"})\n",[428,1423,1424,1427],{"class":430,"line":475},[428,1425,1426],{"class":434},"c  ",[428,1428,1429],{"class":544},"# {'a': 10, 'b': [2], '1k': 1000}\n",[428,1431,1432,1435,1437,1440,1442],{"class":430,"line":515},[428,1433,1434],{"class":434},"c[",[428,1436,786],{"class":448},[428,1438,1439],{"class":434},"].append(",[428,1441,747],{"class":469},[428,1443,1444],{"class":434},")\n",[428,1446,1447,1449],{"class":430,"line":526},[428,1448,1426],{"class":434},[428,1450,1451],{"class":544},"# {'a': 10, 'b': [2, None], '1k': 1000}\n",[428,1453,1454,1457],{"class":430,"line":532},[428,1455,1456],{"class":434},"d  ",[428,1458,1459],{"class":544},"# {'a': 1, 'b': [2, None]}\n",[407,1461,1462,1463,1466,1467,1470],{},"Словарь ",[425,1464,1465],{},"c"," получил собственную структуру, при этом его обновление не затронуло оригинальный словарь ",[425,1468,1469],{},"d",".\nОднако изменение объекта списка по ссылке затронуло и оригинал, потому что при копировании словаря ссылка на список тоже \"скопировалась\".",[578,1472,1474],{"id":1473},"очистка-словаря","Очистка словаря",[407,1476,1477,1478,1480,1481,1484],{},"Списки можно очистить с помощью присваивания срезу my_list[:] = ",[428,1479],{}," .\nВ случае словаря вместо присваивания срезу используется метод ",[425,1482,1483],{},"clear",".",[407,1486,1487,1488,1491],{},"Метод ",[425,1489,1490],{},"clear()"," удаляет все элементы из текущего словаря:",[418,1493,1495],{"className":420,"code":1494,"language":422,"meta":423,"style":423},"d = {\"a\": 1}\nd.clear()\nprint(d)  # {}\n",[425,1496,1497,1513,1518],{"__ignoreMap":423},[428,1498,1499,1501,1503,1505,1507,1509,1511],{"class":430,"line":431},[428,1500,960],{"class":434},[428,1502,439],{"class":438},[428,1504,774],{"class":434},[428,1506,777],{"class":448},[428,1508,452],{"class":434},[428,1510,484],{"class":469},[428,1512,535],{"class":434},[428,1514,1515],{"class":430,"line":445},[428,1516,1517],{"class":434},"d.clear()\n",[428,1519,1520,1522,1524],{"class":430,"line":461},[428,1521,827],{"class":469},[428,1523,989],{"class":434},[428,1525,1526],{"class":544},"# {}\n",[402,1528,1530],{"id":1529},"инициализация-новых-значений","Инициализация новых значений",[407,1532,1533],{},"Представьте ситуацию: вам нужно хранить в словаре в качестве значений списки или любые другие изменяемые данные.\nУ вас есть ключ и элемент для добавления в список-значение, но сам ключ в словаре может быть не представлен.\nВ таком случае придется писать подобный код:",[418,1535,1537],{"className":420,"code":1536,"language":422,"meta":423,"style":423},"if key not in dictionary:\n    dictionary[key] = []  # инициализируем список\ndictionary[key].append(value)  # изменяем список\n",[425,1538,1539,1554,1567],{"__ignoreMap":423},[428,1540,1541,1543,1546,1549,1551],{"class":430,"line":431},[428,1542,674],{"class":438},[428,1544,1545],{"class":434}," key ",[428,1547,1548],{"class":438},"not",[428,1550,637],{"class":438},[428,1552,1553],{"class":434}," dictionary:\n",[428,1555,1556,1559,1561,1564],{"class":430,"line":445},[428,1557,1558],{"class":434},"    dictionary[key] ",[428,1560,439],{"class":438},[428,1562,1563],{"class":434}," []  ",[428,1565,1566],{"class":544},"# инициализируем список\n",[428,1568,1569,1572],{"class":430,"line":461},[428,1570,1571],{"class":434},"dictionary[key].append(value)  ",[428,1573,1574],{"class":544},"# изменяем список\n",[407,1576,1577,1578,1484],{},"Подобная ситуация встречается не так уж и редко.\nЭто понимали и авторы стандартной библиотеки Python и дали словарю метод ",[425,1579,1580],{},"setdefault",[578,1582,1530],{"id":1583},"инициализация-новых-значений-1",[407,1585,1586,1587,695],{},"Попробуем переписать код выше с помощью метода ",[425,1588,1580],{},[418,1590,1592],{"className":420,"code":1591,"language":422,"meta":423,"style":423},"dictionary.setdefault(key, []).append(value)\n",[425,1593,1594],{"__ignoreMap":423},[428,1595,1596],{"class":430,"line":431},[428,1597,1591],{"class":434},[407,1599,1487,1600,1602],{},[425,1601,1580],{}," принимает ключ и значение по умолчанию, а затем возвращает ссылку на значение в словаре, связанное с указанным ключом.\nЕсли ключ в словаре отсутствует, то метод помещает по ключу, то самое значение по умолчанию и возвращает ссылку на него.\nВ примере выше значением по умолчанию выступает пустой список [].",[578,1604,1606,1607],{"id":1605},"тип-defaultdict","Тип ",[425,1608,1609],{},"defaultdict",[407,1611,1612,1613,1616,1617,1619,1620,1622,1623,1625],{},"В стандартной поставке Python присутствует модуль ",[425,1614,1615],{},"collections",", который предоставляет тип ",[425,1618,1609],{},".\nВо всех отношениях ",[425,1621,1609],{}," — это обычный словарь.\nПри этом у него есть одно уникальное свойство: там, где обычный словарь \"ругается\" на отсутствие ключа, ",[425,1624,1609],{}," сам возвращает значение по умолчанию.\nРассмотрим пример:",[418,1627,1629],{"className":420,"code":1628,"language":422,"meta":423,"style":423},"from collections import defaultdict\nd = defaultdict(int)\nd[\"a\"] += 1\nd[\"b\"] = d[\"c\"] + 5\nprint(d)  # defaultdict(\u003Cclass 'int'>, {'a': 1, 'c': 0, 'b': 5})\n",[425,1630,1631,1645,1659,1672,1695],{"__ignoreMap":423},[428,1632,1633,1636,1639,1642],{"class":430,"line":431},[428,1634,1635],{"class":438},"from",[428,1637,1638],{"class":434}," collections ",[428,1640,1641],{"class":438},"import",[428,1643,1644],{"class":434}," defaultdict\n",[428,1646,1647,1649,1651,1654,1657],{"class":430,"line":445},[428,1648,960],{"class":434},[428,1650,439],{"class":438},[428,1652,1653],{"class":434}," defaultdict(",[428,1655,1656],{"class":469},"int",[428,1658,1444],{"class":434},[428,1660,1661,1663,1665,1667,1670],{"class":430,"line":461},[428,1662,973],{"class":434},[428,1664,777],{"class":448},[428,1666,671],{"class":434},[428,1668,1669],{"class":438},"+=",[428,1671,982],{"class":469},[428,1673,1674,1676,1678,1680,1682,1685,1687,1689,1692],{"class":430,"line":475},[428,1675,973],{"class":434},[428,1677,786],{"class":448},[428,1679,671],{"class":434},[428,1681,439],{"class":438},[428,1683,1684],{"class":434}," d[",[428,1686,1095],{"class":448},[428,1688,671],{"class":434},[428,1690,1691],{"class":438},"+",[428,1693,1694],{"class":469}," 5\n",[428,1696,1697,1699,1701],{"class":430,"line":515},[428,1698,827],{"class":469},[428,1700,989],{"class":434},[428,1702,1703],{"class":544},"# defaultdict(\u003Cclass 'int'>, {'a': 1, 'c': 0, 'b': 5})\n",[407,1705,1706,1707,1709,1710,1712,1713,1715],{},"При создании словаря мы указали в качестве аргумента функцию ",[425,1708,1656],{},".\nЕсли эту функцию вызвать без аргументов, то она вернет ",[425,1711,1057],{},".\nИменно этот вызов внутри словаря ",[425,1714,1469],{}," и происходит всякий раз, когда нужно получить значение для несуществующего ключа.",[407,1717,1718,1719,1722,1723,1725],{},"В примере выше ",[425,1720,1721],{},"d[\"a\"] += 1"," дает ",[425,1724,484],{},", потому что этот код работает так:",[1219,1727,1728,1740],{},[1222,1729,1730,1731,1733,1734,1737,1738],{},"Сначала для ключа ",[425,1732,777],{}," создается начальное значение — делается вызов ",[425,1735,1736],{},"int()"," и получается ",[425,1739,1057],{},[1222,1741,1742,1743],{},"Уже потом к нему прибавляется ",[425,1744,484],{},[407,1746,1747,1748,1751,1752,1754,1755,1757,1758,1760,1761,1764],{},"В строчке ",[425,1749,1750],{},"d[\"b\"] = d[\"c\"] + 5"," создаются значения для ключей ",[425,1753,786],{}," и ",[425,1756,1095],{},". Затем уже по ключу ",[425,1759,786],{}," записывается сумма ",[425,1762,1763],{},"0 + 5",".\nВот еще один пример — на этот раз с самодельной функцией-инициализатором:",[418,1766,1768],{"className":420,"code":1767,"language":422,"meta":423,"style":423},"from collections import defaultdict\n\ndef new_value():\n    return \"1\"\n\nx = defaultdict(new_value)\nx[1]  # '1'\nx[\"2\"]  # '1'\nprint(x)  # defaultdict(\u003Cfunction new_value at 0x0000018652C1E2A0>, {1: '1', '2': '1'})\n",[425,1769,1770,1780,1786,1798,1806,1810,1820,1832,1843],{"__ignoreMap":423},[428,1771,1772,1774,1776,1778],{"class":430,"line":431},[428,1773,1635],{"class":438},[428,1775,1638],{"class":434},[428,1777,1641],{"class":438},[428,1779,1644],{"class":434},[428,1781,1782],{"class":430,"line":445},[428,1783,1785],{"emptyLinePlaceholder":1784},true,"\n",[428,1787,1788,1791,1795],{"class":430,"line":461},[428,1789,1790],{"class":438},"def",[428,1792,1794],{"class":1793},"s7eDp"," new_value",[428,1796,1797],{"class":434},"():\n",[428,1799,1800,1803],{"class":430,"line":475},[428,1801,1802],{"class":438},"    return",[428,1804,1805],{"class":448}," \"1\"\n",[428,1807,1808],{"class":430,"line":515},[428,1809,1785],{"emptyLinePlaceholder":1784},[428,1811,1812,1815,1817],{"class":430,"line":526},[428,1813,1814],{"class":434},"x ",[428,1816,439],{"class":438},[428,1818,1819],{"class":434}," defaultdict(new_value)\n",[428,1821,1822,1825,1827,1829],{"class":430,"line":532},[428,1823,1824],{"class":434},"x[",[428,1826,484],{"class":469},[428,1828,604],{"class":434},[428,1830,1831],{"class":544},"# '1'\n",[428,1833,1834,1836,1839,1841],{"class":430,"line":538},[428,1835,1824],{"class":434},[428,1837,1838],{"class":448},"\"2\"",[428,1840,604],{"class":434},[428,1842,1831],{"class":544},[428,1844,1846,1848,1851],{"class":430,"line":1845},9,[428,1847,827],{"class":469},[428,1849,1850],{"class":434},"(x)  ",[428,1852,1853],{"class":544},"# defaultdict(\u003Cfunction new_value at 0x0000018652C1E2A0>, {1: '1', '2': '1'})\n",[407,1855,1856,1857,1860],{},"Попробуем отбросить немного непонятное упоминание функции-инициализатора.\nТак станет видно, что теперь строки ",[425,1858,1859],{},"'1'"," записаны по всем ключам, по которым мы обращались к содержимому словаря.",[578,1862,1864,1865,1867,1868],{"id":1863},"отличия-defaultdict-от-обычного-словаря-с-setdefault","Отличия ",[425,1866,1609],{}," от обычного словаря с ",[425,1869,1580],{},[407,1871,1872],{},"Пока не совсем понятно, зачем иметь оба способа, если они настолько похожи. Но давайте сравним эти две строки:",[407,1874,1875],{},"a.setdefault(key, []).append…",[407,1877,1878],{},"и",[407,1880,1881],{},"b[key].append…",[407,1883,1884],{},"b — это defaultdict(list).",[407,1886,1887],{},"Строки очень похожи, но есть одно различие:",[1219,1889,1890,1893],{},[1222,1891,1892],{},"В первом случае объект пустого списка будет создаваться каждый раз",[1222,1894,1895],{},"Во втором случае новый список создается только тогда, когда ключ не будет найден",[407,1897,1898,1899,1902,1903,1905],{},"Значения аргументов всегда вычисляются до того, как будет вызвана функция.\nПоэтому здесь в случае с ",[425,1900,1901],{},"setdefault(key, [])"," затратами на создание пустого списка можно пренебречь.\nЕсли вдруг затраты на создание значения по умолчанию окажутся велики, вариант с ",[425,1904,1609],{}," окажется гораздо предпочтительнее.",[407,1907,1908,1909,1911,1912,1914,1915,1917,1918,1920],{},"Зачем вообще использовать ",[425,1910,1580],{},"? Он помогает инициализировать разные значения по разным ключам.\nЗначение по умолчанию передается каждый раз, поэтому мы можем хранить по разным ключам даже разные типы данных.\nС ",[425,1913,1609],{}," у нас нет контроля над тем, какие значения по каким ключам класть.\nФункция-инициализатор вызывается каждый раз одна и та же — ключ в нее не передается.\nНаконец, всегда остаются редкие случаи, когда и ",[425,1916,1609],{}," не подходит.\nНапример, если нужно инициализировать значения по-разному, но не подходит и ",[425,1919,1580],{},".\nНовые значения неизменяемы, их не получится изменить по возвращаемой ссылке.",[407,1922,1923,1924,1927,1928,1931],{},"Попробуйте сами запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает.\nДля этого в ячейке с кодом нажмите клавиши на клавиатуре ",[745,1925,1926],{},"Shift+Enter"," или запустите код через ",[745,1929,1930],{},"кнопку Run"," по значку ▶.",[1933,1934],"jypiter",{},[1936,1937,1938],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}",{"title":423,"searchDepth":445,"depth":515,"links":1940},[1941],{"id":399,"depth":445,"text":400,"children":1942},[1943,1947,1953],{"id":404,"depth":461,"text":405,"children":1944},[1945,1946],{"id":580,"depth":475,"text":581},{"id":751,"depth":475,"text":752},{"id":942,"depth":461,"text":943,"children":1948},[1949,1950,1951,1952],{"id":1033,"depth":475,"text":1034},{"id":1230,"depth":475,"text":1231},{"id":1336,"depth":475,"text":1337},{"id":1473,"depth":475,"text":1474},{"id":1529,"depth":461,"text":1530,"children":1954},[1955,1956,1958],{"id":1583,"depth":475,"text":1530},{"id":1605,"depth":475,"text":1957},"Тип defaultdict",{"id":1863,"depth":475,"text":1959},"Отличия defaultdict от обычного словаря с setdefault","2025-07-03","Синтаксис. Изменение данных в словаре. Инициализация новых значений","md","images\u002Fblog\u002Fpython\u002Fst18\u002Fimg.png",{},18,{"title":226,"description":1961},"iEJzQQHeKHRAGpC23j7IzHCFwushoPCY_PunQ8Mg5HM",[1969,1971],{"title":222,"path":223,"stem":224,"description":1970,"children":-1},"Срезы, де-структуризация списков. Операторы упаковки и распаковки",{"title":230,"path":231,"stem":232,"description":1972,"children":-1},"Синтаксис. Изменение множеств. Операции над множествами. Методы объектов множеств",1780737509492]