15 Фишек с СЛОВАРЯМИ Python, которые сделают код лучше

  Рет қаралды 62,071

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Телеграм канал: t.me/+iX_OTQwhWHlhYzZh
В данном видео мы рассмотрим 15 особенностей словарей Python, о которых вы возможно не знали. Мы рассмотрим полезные методы и на примерах докажем их эффективность. Это всё будет подкрепляться теоретическими примерами, чтобы улучшить понимание словарей.
Эти 15 вещей в Python, сделают ваш код более простым, помогут убрать огромные конструкции, которые вы пишите руками, и также помогут избежать ошибок во время работы с словарями.
📁 Github: github.com/Zproger
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Связаться со мной: zproger777@gmail.com
📁 Поддержать криптовалютой: github.com/Zproger/donate
Тайм-коды:
0:00 - Почему эта информация будет вам полезна?
0:28 - Особенности словаря
3:00 - Создание словарей через разные конструкции dict
3:48 - Для чего нужны аннотации в связке с dict и как их использовать?
4:19 - Как комбинировать обычные словари с функцией dict?
4:33 - Как принять список в аргументы dict?
5:05 - Извлекаем значения словаря игнорируя исключение KeyError
7:26 - Как автоматически обновлять данные словаря?
8:59 - Значения словаря можно изменять во время выполнения
9:19 - Несколько способов удаления из словаря
11:16 - Как проверить наличие ключа в словаре Python?
11:53 - Глубокое и неглубокое копирование словарей (Как это работает в памяти)
14:15 - Как узнать длину словаря Python?
14:28 - Удобные итерации по словарям (keys, values, items)
15:07 - Генераторы словарей. Создаем 100 объектов в несколько строчек кода
16:18 - Вложенность в словарях, для чего это нужно?
16:48 - OrderedDict - Сохраняем порядок внутри словаря
17:23 - DefaultDict - Автоматическая обработка KeyError
18:27 - Создаем красивый DataFrame из Pandas
18:55 - Знаете ли вы другие фишки с словарями?

Пікірлер: 118
@Sapphire12v
@Sapphire12v Жыл бұрын
(4000) - не является кортежем, что бы сделать кортеж с одним элементом, нужно добавить запятую после элемента вот так: (4000,)
@user-cn6kw6uk6z
@user-cn6kw6uk6z Жыл бұрын
С кортежами это работает иначе, я так понимаю это из-за того что () могут также изменять порядок действий, а если бы этой фичи не было возникали бы множество проблем к примеру в мат выражениях?
@zproger
@zproger Жыл бұрын
Да, ошибочка вышла)
@forquest8127
@forquest8127 Жыл бұрын
@@zproger в демонстрации того, что кортеж может быть ключом, точно такая же ошибка. Но да кортеж может быть ключом.
@ruden6623
@ruden6623 Жыл бұрын
Тоже хотел это написать, без запятой это обычная строка
@user-cr8rp6xj2l
@user-cr8rp6xj2l 9 ай бұрын
можно и без скобок
@Zemchik
@Zemchik Жыл бұрын
Мне бы эти знания, да пару месяцев назад... хотя найти и самому во всем разобраться будет все же полезней. В любом случае несколько моментов понял лучше, а с чем-то еще не сталкивался и в будущем уже буду знать как их обойти. Спасибо!
@yarilo-dev
@yarilo-dev Жыл бұрын
Это было познавательно. Спасибо!
@ava11ach
@ava11ach Жыл бұрын
Спасибо большое за знания, дай Бог здоровья!
@zproger
@zproger Жыл бұрын
Спасибо =))
@ruslansanzharov5825
@ruslansanzharov5825 11 ай бұрын
3:09 dict - не ключевое слово. Ключевые слова - конструкции вроде if, True, def и другие, а dict - класс встроенного модуля builtins. Его можно импортировать через import
@abyrvalg_
@abyrvalg_ Жыл бұрын
Методы .get() и .update() представляются полезными, особенно в циклах.
@zproger
@zproger Жыл бұрын
Согласен
@Alexis-rr3nv
@Alexis-rr3nv Жыл бұрын
Спасибо большое! Как новичок говорю что это годный контент!
@zproger
@zproger Жыл бұрын
😉
@archyt88
@archyt88 Жыл бұрын
Интересно. Спасибо за видео
@zproger
@zproger Жыл бұрын
😉
@alexeymatveev9031
@alexeymatveev9031 Жыл бұрын
Супер канал, спасибо!
@zproger
@zproger Жыл бұрын
😉
@user-sf9nn6dh2q
@user-sf9nn6dh2q Жыл бұрын
Хорошее видео, спасибо!
@zproger
@zproger Жыл бұрын
😉
@thenyan6832
@thenyan6832 7 күн бұрын
Одно что я заметил, в условном операторе и циклах использовать конструкцию с методом словаря типа dict.keys() нет смысла, так как при подобных операциях и так мы получим ключи словаря, практически единственный момент где нужен этот метод, так это при выводе в print(dict.keys())
@yoz75
@yoz75 Жыл бұрын
Полезно и классно , лайк.
@zproger
@zproger Жыл бұрын
Благодарю!
@pestovalexey
@pestovalexey Жыл бұрын
Все очень чётко и по делу. Здорово! Но очень быстро, иногда картинка с кодом пропадает, когда диктор ещё не договорил. Приходится многократно перематывать. Зачем такая спешка?
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
6:58 Ещё если лень юзать dict.get (а я из таких) можно преобразовать имеющийся словарь в defaultdict, он есть в модуле collections: Нашёл весьма интересный и удобный способ это сделать: >>> d = dict(a=5, b=7) >>> d {'a': 5, 'b': 7} >>> d['a'] 5 >>> d['c'] Traceback (most recent call last): File "", line 1, in KeyError: 'c' >>> d['c', None] Traceback (most recent call last): File "", line 1, in KeyError: ('c', None) >>> d['c'] else None File "", line 1 d['c'] else None ^^^^ SyntaxError: invalid syntax >>> help(dict) >>> from collections import defaultdict >>> >>> d = defaultdict(lambda: None, d) >>> d defaultdict(, {'a': 5, 'b': 7}) >>> d['c'] >>> type(d['c']) >>>
@Pro100Sasha2014
@Pro100Sasha2014 Жыл бұрын
Немного говнокод
@adultart
@adultart Жыл бұрын
то есть тебе питон явно и ванильно говорит "смотри, у меня есть простой и безопасный метод get", но ты предлагаешь задействовать ресурсы на дополнительное преобразование да еще и с какими-то неочевидными лямбда-функциями? )
@the_w0nderful43
@the_w0nderful43 Жыл бұрын
В конце видео было про это))
@seoonlyRU
@seoonlyRU Жыл бұрын
ух, круть! Лайк за фишечки от СЕООНЛИ
@zproger
@zproger Жыл бұрын
Благодарю
@user-yk2zc8vy6u
@user-yk2zc8vy6u Жыл бұрын
Годнота, спасибо за контент) Если будет не лень или вдруг уже делал, то было бы не плохо узнать про стандартные библиотеки Тот же collection или itertool
@rokot
@rokot Жыл бұрын
Как обойти try except за это спасибо! Я пару раз спрашивал в различных местах, не получил ответа. Словари - это мой рабочий инструмент. При помощи них я делаю свою функциональщину. Ключ - название объекта, а в значении сам объект. Таким образом я обхожусь без ООП. У меня есть GUI либа, если заглянуть в кишки, там этих try except просто море, так как пользователь может указать какие-то параметры, а какие-то не указывать. Я всё пытался избавиться от try except, чтобы код выглядел чище.
@TurboKot1k
@TurboKot1k 7 ай бұрын
я вот пришел на проект к таким же молодцам, которые обходятся без ООП, все на словарях, мрак сплошной, поддержка крайне дорогая и сложная, так что лучше используй ООП и не надо говнокодить
@ydjin3930
@ydjin3930 6 ай бұрын
Попробуйте pydantic или аналоги, жизнь мб красками заиграет)
@mesteriis
@mesteriis Жыл бұрын
Порадовало что бы вывести табличку в консоль скачайте библиотеку на 100 слишнем метров)))
@user-gf6er4ug6g
@user-gf6er4ug6g Жыл бұрын
2:23 Функцию можно использовать как ключ, хотя она вроде как является изменяемым типом данных можно поменять аннотации, значения по умолчанию, добавлять новые атрибуты, даже сам код поменять можно, однако функцию можно использовать как ключ словаря.
@user-nu3ot7td1j
@user-nu3ot7td1j 8 ай бұрын
ключом словаря может быть любой хэшируемый объект. То есть тот, у которого есть метод hash, так правильнее отвечать
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
17:55 😂😅, а я недавно копался в collections за этим.. Спасибо за видос!
@zproger
@zproger Жыл бұрын
=))
@FXUNDPLXGG
@FXUNDPLXGG Жыл бұрын
Мега крут, поделись темой VSCode :)
@zproger
@zproger Жыл бұрын
Dracula
@Alpha_Gamma_Beta
@Alpha_Gamma_Beta Жыл бұрын
deepcopy зачтено, пасиба
@flayers1646
@flayers1646 Жыл бұрын
Благодарю. А не подскажете что за линукс у вас стоит ?
@zproger
@zproger Жыл бұрын
ZorinOs
@ruslansanzharov5825
@ruslansanzharov5825 11 ай бұрын
16:01 думаю что по материалу видео можно было сделать так: dict(*zip(iters, values))
@MyKashiwa
@MyKashiwa Жыл бұрын
Классно! Очень полезно
@zproger
@zproger Жыл бұрын
😉
@user-bi4wd8hr2r
@user-bi4wd8hr2r Жыл бұрын
2:55 [3] Кортежем это станет, если после "port" добавить запятую. ("port") == "port", а ("port",) это кортеж
@Zakar-gm2yl
@Zakar-gm2yl Жыл бұрын
Привет, го рубрику с написанием программ с пояснениями ?
@vld_dmn
@vld_dmn 3 күн бұрын
ключами являются не неизменяемые типы, а хэширумые данные
@luckyme8610
@luckyme8610 Жыл бұрын
Добрый день, постоянно смотрю ваши видео, подскажите пожалуйста , есть в списке 1 миллиард чисел но только 1 и 0. Каким методом быстрее всего подсчитать сумму всех 1. Пробовал словарем, но все равно ругается на длительное выполнение программы.
@user-nu3ot7td1j
@user-nu3ot7td1j 8 ай бұрын
через counter
@user-xy2jm7zt5u
@user-xy2jm7zt5u Жыл бұрын
кортЕж кортЕжа кортЕжей кортЕжами
@zproger
@zproger Жыл бұрын
да 😎
@ydjin3930
@ydjin3930 6 ай бұрын
а на какой минуте фишки диктов?
@user-lw2cf1ft1k
@user-lw2cf1ft1k Жыл бұрын
вместо итерации по dict.keys() можно итерироваться сразу по словарю, результат будет такой же.
@artembagachkov933
@artembagachkov933 Жыл бұрын
{"Просто": "супер"}
@zproger
@zproger Жыл бұрын
=)
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
6:58 А я раньше делал dict['key'] if 'key' in dict else None А можно как-то немного модифицировать штатный словарь для вызова без dict.get? Я просто ленивый 😅
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
О, а можно ли указать default при вызове через dict['key']?
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
Нашёл весьма интересный и удобный способ это сделать: >>> from collections import defaultdict >>> d = {'foo': 123, 'bar': 456} >>> d['baz'] Traceback (most recent call last): File "", line 1, in KeyError: 'baz' >>> d = defaultdict(lambda: -1, d) >>> d['baz'] -1
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
13:48 👍👍👍
@vladimirkorshunov7734
@vladimirkorshunov7734 Жыл бұрын
Не знаю на сколько часто это используется, но в качестве значений в словарях можно хранить не только данные, но и ссылки на код (функции, методы) PS автору, если поработаешь чуток с голосом, то будет гораздо приятнее слушать. Сейчас он звучит немного натужно. Как будто бы ты куда-то очень торопишься, а мы тебя задерживаем. Это не хейт, просто рекомендация.
@AwakenDrow
@AwakenDrow 10 ай бұрын
Часто используется. В тех же мапперах
@adultart
@adultart Жыл бұрын
Использование get с дефолтным параметром ведет к хитрым багулинам. Допустим, я получил данные в виде словаря с некоторого источника и действительно не уверен, что конкретный ключ в словаре присутствует. Пишу: name = data_dict.get('name', '') И далее по коду работаю с name как со строкой. И гарантированно ловлю ошибку, если вдруг источник мне вернул словарь, где ключ 'name' есть, но значения у него нет. Метод get вытащит этот несчастный None и все сломает. Более безопасно писать: name = data_dict.get('name') or ''
@awenn2015
@awenn2015 Жыл бұрын
Словарь, он же ассоциативный массив, он же объект, он же map или mutable map
@bot_N666
@bot_N666 Жыл бұрын
Ну наконец то... значит теперь словарь упорядочный массив. То то я непонимал почему рор возвращал последнее значение, а вроде бы должен случайное. Скиллбокс!!! , если вы поняли о чем я.
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
11:02 🤔, может и на это есть что-то в collections?
@zproger
@zproger Жыл бұрын
Там много чего интересного)
@user-io7ji9uz4y
@user-io7ji9uz4y Жыл бұрын
Сделай видос, Деобфускация PyArmor
@minimus91
@minimus91 Жыл бұрын
Может оказаться полезным: метод dict.keys возвращает объект, поддерживающий операторы для множеств.
@stevemantino5961
@stevemantino5961 Жыл бұрын
Автор, какая у тебя система?
@zproger
@zproger Жыл бұрын
ZorinOS
@user-gf6er4ug6g
@user-gf6er4ug6g Жыл бұрын
16:54 Не правильно. Ordered dict надо делать из списка пар кортежей ключ-значение а не из обычного словаря. Ordered dict, конечно запомнит последовательность, но он примет в качестве аргумента обычный словарь, который не помнит. Надо было писать так: collections.OrderedDict([("a",1),("b",2),("c",3)]) 17:17 Да ты чо? А попробуй запустить свой код.
@hurrdurrrderp
@hurrdurrrderp 7 ай бұрын
Вроде не новичок, но то, что OrderedDict можно не использовать начиная с 3.7, узнал только сейчас.
@metasy_
@metasy_ Жыл бұрын
а разве это не dict comprehension? (я про генератор)
@zproger
@zproger Жыл бұрын
Да, я просто учился по книгам где это называют "генераторами", поэтому привык тоже так называть)
@ooh_no_cringe
@ooh_no_cringe 7 ай бұрын
Зачем чёрные полосы(letterbox) ?((
@lmaootakedh
@lmaootakedh Жыл бұрын
6:57 Если какой-то элемент которое вы хотите получить имеет None значение...
@zproger
@zproger Жыл бұрын
😉
@cherimolah9493
@cherimolah9493 Жыл бұрын
2:43 ток запятую забыл поставить, чтобы кортеж сделать. А так получились просто скобки
@zproger
@zproger Жыл бұрын
Точно, не обратил на это внимание
@cherimolah9493
@cherimolah9493 Жыл бұрын
@@zproger в любом случае спасибо за видео. Не знал, что метод get не возвращает ошибку Keyerror
@jurissiberian7568
@jurissiberian7568 Жыл бұрын
В данном видео ни один кортеж не пострадал :)
@user-jn3gl8tx6p
@user-jn3gl8tx6p Жыл бұрын
Может кто-нибудь объяснить, что тут происходит? 15:40
@TheVenelo
@TheVenelo Жыл бұрын
Что делать, если нужно добавить к существующему ключу с его значением дополнительное значение? То есть не просто обновить и затереть прошлое значение ключа, а добавить дополнительное значение, и так несколько раз. Например, есть объекты которые содержат Жанр, Имя Автора и Название его книги, и нужно сформировать вложенный словарь. {"Название жанра": {"Имя автора": ["Название книги"], {"Имя автора": ["Название книги", "Название книги"]}}} Если я просто начну обновлять значение я затру то что занес ранее. Пф как мог старался донести мысль))
@user-nu3ot7td1j
@user-nu3ot7td1j 8 ай бұрын
не знаю актуально ли спустя 7 месяцев отвечать на комментарий, но может кому-то все же будет полезно мы используем для этого тот же get d['ключ'] = d.get(ключ, []) + [значение] получается у нас будет создан ключ в котором значение - пустой словарь, и если мы идет циклом for , то на каждой итерации можем добавлять в список новое значение
@ydjin3930
@ydjin3930 6 ай бұрын
@@user-nu3ot7td1j ага, а еще есть defaultdict(list). За конкатенацию по головке никто не погладит
@ibrahimoglu
@ibrahimoglu Жыл бұрын
👍
@zproger
@zproger Жыл бұрын
😉
@vbncursed
@vbncursed Жыл бұрын
какой это дистрибутив линукс?
@zproger
@zproger Жыл бұрын
Zorin OS
@dealingounces6715
@dealingounces6715 Жыл бұрын
я не до конца понимаю, что делает метод get?
@zproger
@zproger Жыл бұрын
Извлекает значение по ключу из словаря. Аналогично будет если написать a["name"], просто get это делает без ошибки KeyError.
@dealingounces6715
@dealingounces6715 Жыл бұрын
@@zproger спасибо большое!
@user-it3yo1sn6i
@user-it3yo1sn6i Жыл бұрын
В принципе, можно завести себе практику вообще не использовать для изменяемых объектов copy() а использовать для себя по умолчанию deepcopy()
@dmitriysviridenko2958
@dmitriysviridenko2958 Жыл бұрын
1. операция deepcopy медленнее 2. приходится выделять лишнюю память под данные если словари маленькие особой разницы не заметите, но на собеседовании могут спросить, да и если данных много и там будут ещё какие-то тяжелые объекты то можно прикурить
@CrossBend
@CrossBend Жыл бұрын
15:45 - мозг сломался! как так все в одну строку заработало?
@ydjin3930
@ydjin3930 6 ай бұрын
ага, а еще можно было через zip() сразу 2 списка взять а не говнокодить {key: value for key, value in zip(list_1, list_2, strict=True)} или же просто dict(zip(list_1, list_2, strict=True))
@VaeV1ct1s
@VaeV1ct1s Жыл бұрын
2:10 "Ключём словаря может быть только неизменяемый тип" Почему у тех, кто не разобрался в теме такая мания кого то учить? Ключём словаря может быть любой хешируемый объект
@spi4caru950
@spi4caru950 3 ай бұрын
10:47 - ошибка есть
@pythonForEvOne
@pythonForEvOne 11 ай бұрын
все эти фишкит есть в офф доке, чтение которой занимает меньше 5ти минут
@TahirKabilov
@TahirKabilov Жыл бұрын
метод setdefault(key, default)
@demg7738
@demg7738 Жыл бұрын
Может кому-то пригодится: dd = defaultdict( dict ) dd['a']['b']['c'] = 3 Defaultdict принимает любую функцию, а не только и dict в данном случае всегда будет продуцировать новый словарь Так можно строить деревья произвольной глубины и ветвлений и это мегаполезная функция в том числе и в реальной работе.
@Simon_Simon
@Simon_Simon 11 ай бұрын
Эта херня не работает.🤪
@grayich
@grayich Жыл бұрын
млять, я не успеваю, только начинаешь понимать какую тему, а уже на 3 темы вперёд ушло 😵‍💫 очень плотно и быстро, без пауз и пересмотров никак. консолька слишком высокая, куча лишней инфы, при этом прячется код который был до этого показан 100 микросекунд да и рабочее пространство на фулскрин хорошо бы, к чему эта "красота" вокруг съедающая полезное место когда его и так нехваатет
@vrabosh
@vrabosh Жыл бұрын
из за такой скорости, его приятно смотреть тем, кто уже знает язык, но подзабыл, допустим год не пользовался. а еслиб разсусоливал, то врятли бы смотрел.
@grayich
@grayich Жыл бұрын
@@vrabosh даже для таких это слишком, даже междупауз нет
@bulik1384
@bulik1384 Жыл бұрын
куда ты так спешишь?
@waltage
@waltage Жыл бұрын
а как обращаться к вложенному словари мы сами должны догадаться?
@TheKirp777
@TheKirp777 3 ай бұрын
Может, со словарями, а не с словарями? Ты робот что ли?
@zproger
@zproger 3 ай бұрын
именно)
@mammadalimammadaliyev6105
@mammadalimammadaliyev6105 Жыл бұрын
Отписка за незнание синтаксиса кортежа
@zproger
@zproger Жыл бұрын
Просто забыл запятую поставить, с кем не бывает Но можете отписываться, никто не держит
@eugenebubnov8468
@eugenebubnov8468 Жыл бұрын
Отвратительная подача материала... Куда лектор торопиться-то?
@luispakvard5681
@luispakvard5681 Жыл бұрын
Об'єднати списки в словник можна так: kys=["id","name","grade"] vals=[343,"vasya",100] mydict=dict(zip(kys,vals)) >>> mydict {'id': 343, 'name': 'vasya', 'grade': 100} Потім заапдейтити можна так newdict={'sex':'male','age':33} mydict={**mydict,**newdict} {'id': 343, 'name': 'vasya', 'grade': 100, 'sex': 'male', 'age': 33}
ТОП 5 Ошибок в написании функций Python
12:46
MOM TURNED THE NOODLES PINK😱
00:31
JULI_PROETO
Рет қаралды 8 МЛН
Chips evolution !! 😔😔
00:23
Tibo InShape
Рет қаралды 42 МЛН
18 Фишек Python о которых мало кто говорит
14:13
JavaScript Promises  -- Tutorial for Beginners
37:05
ColorCode
Рет қаралды 105 М.
Как избавиться от циклов импорта в Python
13:09
Rust Demystified 🪄 Simplifying The Toughest Parts
14:05
Code to the Moon
Рет қаралды 167 М.
MOM TURNED THE NOODLES PINK😱
00:31
JULI_PROETO
Рет қаралды 8 МЛН