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

  Рет қаралды 65,623

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

Пікірлер: 120
@Sapphire12v
@Sapphire12v 2 жыл бұрын
(4000) - не является кортежем, что бы сделать кортеж с одним элементом, нужно добавить запятую после элемента вот так: (4000,)
@ОлегШабанов-щ4ь
@ОлегШабанов-щ4ь 2 жыл бұрын
С кортежами это работает иначе, я так понимаю это из-за того что () могут также изменять порядок действий, а если бы этой фичи не было возникали бы множество проблем к примеру в мат выражениях?
@zproger
@zproger 2 жыл бұрын
Да, ошибочка вышла)
@forquest8127
@forquest8127 2 жыл бұрын
@@zproger в демонстрации того, что кортеж может быть ключом, точно такая же ошибка. Но да кортеж может быть ключом.
@ruden6623
@ruden6623 2 жыл бұрын
Тоже хотел это написать, без запятой это обычная строка
@КузькинДима
@КузькинДима Жыл бұрын
можно и без скобок
@ava11ach
@ava11ach 2 жыл бұрын
Спасибо большое за знания, дай Бог здоровья!
@zproger
@zproger 2 жыл бұрын
Спасибо =))
@Zemchik
@Zemchik 2 жыл бұрын
Мне бы эти знания, да пару месяцев назад... хотя найти и самому во всем разобраться будет все же полезней. В любом случае несколько моментов понял лучше, а с чем-то еще не сталкивался и в будущем уже буду знать как их обойти. Спасибо!
@Alexis-rr3nv
@Alexis-rr3nv 2 жыл бұрын
Спасибо большое! Как новичок говорю что это годный контент!
@zproger
@zproger 2 жыл бұрын
😉
@pestovalexey
@pestovalexey Жыл бұрын
Все очень чётко и по делу. Здорово! Но очень быстро, иногда картинка с кодом пропадает, когда диктор ещё не договорил. Приходится многократно перематывать. Зачем такая спешка?
@abyrvalg_
@abyrvalg_ 2 жыл бұрын
Методы .get() и .update() представляются полезными, особенно в циклах.
@zproger
@zproger 2 жыл бұрын
Согласен
@seoonlyRU
@seoonlyRU 2 жыл бұрын
ух, круть! Лайк за фишечки от СЕООНЛИ
@zproger
@zproger 2 жыл бұрын
Благодарю
@ruslansanzharov5825
@ruslansanzharov5825 Жыл бұрын
3:09 dict - не ключевое слово. Ключевые слова - конструкции вроде if, True, def и другие, а dict - класс встроенного модуля builtins. Его можно импортировать через import
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
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 2 жыл бұрын
Немного говнокод
@adultart
@adultart Жыл бұрын
то есть тебе питон явно и ванильно говорит "смотри, у меня есть простой и безопасный метод get", но ты предлагаешь задействовать ресурсы на дополнительное преобразование да еще и с какими-то неочевидными лямбда-функциями? )
@the_w0nderful43
@the_w0nderful43 Жыл бұрын
В конце видео было про это))
@thenyan6832
@thenyan6832 6 ай бұрын
Одно что я заметил, в условном операторе и циклах использовать конструкцию с методом словаря типа dict.keys() нет смысла, так как при подобных операциях и так мы получим ключи словаря, практически единственный момент где нужен этот метод, так это при выводе в print(dict.keys())
@archyt88
@archyt88 2 жыл бұрын
Интересно. Спасибо за видео
@zproger
@zproger 2 жыл бұрын
😉
@КириллКалита-ч3ж
@КириллКалита-ч3ж 2 жыл бұрын
Хорошее видео, спасибо!
@zproger
@zproger 2 жыл бұрын
😉
@yoz75
@yoz75 2 жыл бұрын
Полезно и классно , лайк.
@zproger
@zproger 2 жыл бұрын
Благодарю!
@alexeymatveev9031
@alexeymatveev9031 2 жыл бұрын
Супер канал, спасибо!
@zproger
@zproger 2 жыл бұрын
😉
@Shadowfight-z5f
@Shadowfight-z5f Жыл бұрын
2:23 Функцию можно использовать как ключ, хотя она вроде как является изменяемым типом данных можно поменять аннотации, значения по умолчанию, добавлять новые атрибуты, даже сам код поменять можно, однако функцию можно использовать как ключ словаря.
@ИннаЛиксакова-о4н
@ИннаЛиксакова-о4н Жыл бұрын
ключом словаря может быть любой хэшируемый объект. То есть тот, у которого есть метод hash, так правильнее отвечать
@yarilo-dev
@yarilo-dev 2 жыл бұрын
Это было познавательно. Спасибо!
@TheTruepikvic
@TheTruepikvic 4 ай бұрын
Неизменяемость ключей нужна для их хэшируемости, а не для того, о чем сказано в видео
@rokot
@rokot 2 жыл бұрын
Как обойти try except за это спасибо! Я пару раз спрашивал в различных местах, не получил ответа. Словари - это мой рабочий инструмент. При помощи них я делаю свою функциональщину. Ключ - название объекта, а в значении сам объект. Таким образом я обхожусь без ООП. У меня есть GUI либа, если заглянуть в кишки, там этих try except просто море, так как пользователь может указать какие-то параметры, а какие-то не указывать. Я всё пытался избавиться от try except, чтобы код выглядел чище.
@TurboKot1k
@TurboKot1k Жыл бұрын
я вот пришел на проект к таким же молодцам, которые обходятся без ООП, все на словарях, мрак сплошной, поддержка крайне дорогая и сложная, так что лучше используй ООП и не надо говнокодить
@ydjin3930
@ydjin3930 Жыл бұрын
Попробуйте pydantic или аналоги, жизнь мб красками заиграет)
@Alpha_Gamma_Beta
@Alpha_Gamma_Beta Жыл бұрын
deepcopy зачтено, пасиба
@flayers1646
@flayers1646 2 жыл бұрын
Благодарю. А не подскажете что за линукс у вас стоит ?
@zproger
@zproger 2 жыл бұрын
ZorinOs
@mesteriis
@mesteriis Жыл бұрын
Порадовало что бы вывести табличку в консоль скачайте библиотеку на 100 слишнем метров)))
@АндрейИсаков-э4к
@АндрейИсаков-э4к Жыл бұрын
2:55 [3] Кортежем это станет, если после "port" добавить запятую. ("port") == "port", а ("port",) это кортеж
@VaeV1ct1s
@VaeV1ct1s Жыл бұрын
2:10 "Ключём словаря может быть только неизменяемый тип" Почему у тех, кто не разобрался в теме такая мания кого то учить? Ключём словаря может быть любой хешируемый объект
@artembagachkov933
@artembagachkov933 2 жыл бұрын
{"Просто": "супер"}
@zproger
@zproger 2 жыл бұрын
=)
@FXUNDPLXGG
@FXUNDPLXGG 2 жыл бұрын
Мега крут, поделись темой VSCode :)
@zproger
@zproger 2 жыл бұрын
Dracula
@awenn2015
@awenn2015 Жыл бұрын
Словарь, он же ассоциативный массив, он же объект, он же map или mutable map
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
13:48 👍👍👍
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
17:55 😂😅, а я недавно копался в collections за этим.. Спасибо за видос!
@zproger
@zproger 2 жыл бұрын
=))
@Zakar-gm2yl
@Zakar-gm2yl 2 жыл бұрын
Привет, го рубрику с написанием программ с пояснениями ?
@bot_N666
@bot_N666 Жыл бұрын
Ну наконец то... значит теперь словарь упорядочный массив. То то я непонимал почему рор возвращал последнее значение, а вроде бы должен случайное. Скиллбокс!!! , если вы поняли о чем я.
@adultart
@adultart Жыл бұрын
Использование get с дефолтным параметром ведет к хитрым багулинам. Допустим, я получил данные в виде словаря с некоторого источника и действительно не уверен, что конкретный ключ в словаре присутствует. Пишу: name = data_dict.get('name', '') И далее по коду работаю с name как со строкой. И гарантированно ловлю ошибку, если вдруг источник мне вернул словарь, где ключ 'name' есть, но значения у него нет. Метод get вытащит этот несчастный None и все сломает. Более безопасно писать: name = data_dict.get('name') or ''
@vld_dmn
@vld_dmn 5 ай бұрын
ключами являются не неизменяемые типы, а хэширумые данные
@ИванВалеев-б1й
@ИванВалеев-б1й 2 жыл бұрын
вместо итерации по dict.keys() можно итерироваться сразу по словарю, результат будет такой же.
@ФдрФфф
@ФдрФфф Жыл бұрын
кортЕж кортЕжа кортЕжей кортЕжами
@zproger
@zproger Жыл бұрын
да 😎
@АнимеШняга
@АнимеШняга 2 жыл бұрын
Сделай видос, Деобфускация PyArmor
@ruslansanzharov5825
@ruslansanzharov5825 Жыл бұрын
16:01 думаю что по материалу видео можно было сделать так: dict(*zip(iters, values))
@svvonline1
@svvonline1 2 ай бұрын
Так как у Вас выдает ошибку (Python 3.12.3). А вот так работает: dict(zip(iters, values))
@demg7738
@demg7738 Жыл бұрын
Может кому-то пригодится: dd = defaultdict( dict ) dd['a']['b']['c'] = 3 Defaultdict принимает любую функцию, а не только и dict в данном случае всегда будет продуцировать новый словарь Так можно строить деревья произвольной глубины и ветвлений и это мегаполезная функция в том числе и в реальной работе.
@Simon_Simon
@Simon_Simon Жыл бұрын
Эта херня не работает.🤪
@luckyme8610
@luckyme8610 Жыл бұрын
Добрый день, постоянно смотрю ваши видео, подскажите пожалуйста , есть в списке 1 миллиард чисел но только 1 и 0. Каким методом быстрее всего подсчитать сумму всех 1. Пробовал словарем, но все равно ругается на длительное выполнение программы.
@ИннаЛиксакова-о4н
@ИннаЛиксакова-о4н Жыл бұрын
через counter
@ПавелГолубев-п8о
@ПавелГолубев-п8о 2 жыл бұрын
Годнота, спасибо за контент) Если будет не лень или вдруг уже делал, то было бы не плохо узнать про стандартные библиотеки Тот же collection или itertool
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
11:02 🤔, может и на это есть что-то в collections?
@zproger
@zproger 2 жыл бұрын
Там много чего интересного)
@vladimirkorshunov7734
@vladimirkorshunov7734 2 жыл бұрын
Не знаю на сколько часто это используется, но в качестве значений в словарях можно хранить не только данные, но и ссылки на код (функции, методы) PS автору, если поработаешь чуток с голосом, то будет гораздо приятнее слушать. Сейчас он звучит немного натужно. Как будто бы ты куда-то очень торопишься, а мы тебя задерживаем. Это не хейт, просто рекомендация.
@AwakenDrow
@AwakenDrow Жыл бұрын
Часто используется. В тех же мапперах
@ydjin3930
@ydjin3930 Жыл бұрын
а на какой минуте фишки диктов?
@lmaootakedh
@lmaootakedh 2 жыл бұрын
6:57 Если какой-то элемент которое вы хотите получить имеет None значение...
@zproger
@zproger 2 жыл бұрын
😉
@stevemantino5961
@stevemantino5961 2 жыл бұрын
Автор, какая у тебя система?
@zproger
@zproger 2 жыл бұрын
ZorinOS
@Shadowfight-z5f
@Shadowfight-z5f Жыл бұрын
16:54 Не правильно. Ordered dict надо делать из списка пар кортежей ключ-значение а не из обычного словаря. Ordered dict, конечно запомнит последовательность, но он примет в качестве аргумента обычный словарь, который не помнит. Надо было писать так: collections.OrderedDict([("a",1),("b",2),("c",3)]) 17:17 Да ты чо? А попробуй запустить свой код.
@hurrdurrrderp
@hurrdurrrderp Жыл бұрын
Вроде не новичок, но то, что OrderedDict можно не использовать начиная с 3.7, узнал только сейчас.
@metasy_
@metasy_ 2 жыл бұрын
а разве это не dict comprehension? (я про генератор)
@zproger
@zproger 2 жыл бұрын
Да, я просто учился по книгам где это называют "генераторами", поэтому привык тоже так называть)
@TheVenelo
@TheVenelo Жыл бұрын
Что делать, если нужно добавить к существующему ключу с его значением дополнительное значение? То есть не просто обновить и затереть прошлое значение ключа, а добавить дополнительное значение, и так несколько раз. Например, есть объекты которые содержат Жанр, Имя Автора и Название его книги, и нужно сформировать вложенный словарь. {"Название жанра": {"Имя автора": ["Название книги"], {"Имя автора": ["Название книги", "Название книги"]}}} Если я просто начну обновлять значение я затру то что занес ранее. Пф как мог старался донести мысль))
@ИннаЛиксакова-о4н
@ИннаЛиксакова-о4н Жыл бұрын
не знаю актуально ли спустя 7 месяцев отвечать на комментарий, но может кому-то все же будет полезно мы используем для этого тот же get d['ключ'] = d.get(ключ, []) + [значение] получается у нас будет создан ключ в котором значение - пустой словарь, и если мы идет циклом for , то на каждой итерации можем добавлять в список новое значение
@ydjin3930
@ydjin3930 Жыл бұрын
@@ИннаЛиксакова-о4н ага, а еще есть defaultdict(list). За конкатенацию по головке никто не погладит
@MyKashiwa
@MyKashiwa 2 жыл бұрын
Классно! Очень полезно
@zproger
@zproger 2 жыл бұрын
😉
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
6:58 А я раньше делал dict['key'] if 'key' in dict else None А можно как-то немного модифицировать штатный словарь для вызова без dict.get? Я просто ленивый 😅
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
О, а можно ли указать default при вызове через dict['key']?
@blackcatdevel0per
@blackcatdevel0per 2 жыл бұрын
Нашёл весьма интересный и удобный способ это сделать: >>> 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
@cherimolah9493
@cherimolah9493 2 жыл бұрын
2:43 ток запятую забыл поставить, чтобы кортеж сделать. А так получились просто скобки
@zproger
@zproger 2 жыл бұрын
Точно, не обратил на это внимание
@cherimolah9493
@cherimolah9493 2 жыл бұрын
@@zproger в любом случае спасибо за видео. Не знал, что метод get не возвращает ошибку Keyerror
@jurissiberian7568
@jurissiberian7568 2 жыл бұрын
В данном видео ни один кортеж не пострадал :)
@minimus91
@minimus91 2 жыл бұрын
Может оказаться полезным: метод dict.keys возвращает объект, поддерживающий операторы для множеств.
@ooh_no_cringe
@ooh_no_cringe Жыл бұрын
Зачем чёрные полосы(letterbox) ?((
@ГубкаБоб-р8ъ
@ГубкаБоб-р8ъ 2 жыл бұрын
В принципе, можно завести себе практику вообще не использовать для изменяемых объектов copy() а использовать для себя по умолчанию deepcopy()
@dmitriysviridenko2958
@dmitriysviridenko2958 Жыл бұрын
1. операция deepcopy медленнее 2. приходится выделять лишнюю память под данные если словари маленькие особой разницы не заметите, но на собеседовании могут спросить, да и если данных много и там будут ещё какие-то тяжелые объекты то можно прикурить
@vena14
@vena14 Жыл бұрын
Может кто-нибудь объяснить, что тут происходит? 15:40
@vbncursed
@vbncursed 2 жыл бұрын
какой это дистрибутив линукс?
@zproger
@zproger 2 жыл бұрын
Zorin OS
@spi4caru950
@spi4caru950 9 ай бұрын
10:47 - ошибка есть
@CrossBend
@CrossBend Жыл бұрын
15:45 - мозг сломался! как так все в одну строку заработало?
@ydjin3930
@ydjin3930 Жыл бұрын
ага, а еще можно было через zip() сразу 2 списка взять а не говнокодить {key: value for key, value in zip(list_1, list_2, strict=True)} или же просто dict(zip(list_1, list_2, strict=True))
@dealingounces6715
@dealingounces6715 2 жыл бұрын
я не до конца понимаю, что делает метод get?
@zproger
@zproger 2 жыл бұрын
Извлекает значение по ключу из словаря. Аналогично будет если написать a["name"], просто get это делает без ошибки KeyError.
@dealingounces6715
@dealingounces6715 2 жыл бұрын
@@zproger спасибо большое!
@ibrahimoglu
@ibrahimoglu 2 жыл бұрын
👍
@zproger
@zproger 2 жыл бұрын
😉
@TahirKabilov
@TahirKabilov Жыл бұрын
метод setdefault(key, default)
@pythonForEvOne
@pythonForEvOne Жыл бұрын
все эти фишкит есть в офф доке, чтение которой занимает меньше 5ти минут
@waltage
@waltage Жыл бұрын
а как обращаться к вложенному словари мы сами должны догадаться?
@bulik1384
@bulik1384 Жыл бұрын
куда ты так спешишь?
@grayich
@grayich 2 жыл бұрын
млять, я не успеваю, только начинаешь понимать какую тему, а уже на 3 темы вперёд ушло 😵‍💫 очень плотно и быстро, без пауз и пересмотров никак. консолька слишком высокая, куча лишней инфы, при этом прячется код который был до этого показан 100 микросекунд да и рабочее пространство на фулскрин хорошо бы, к чему эта "красота" вокруг съедающая полезное место когда его и так нехваатет
@vrabosh
@vrabosh 2 жыл бұрын
из за такой скорости, его приятно смотреть тем, кто уже знает язык, но подзабыл, допустим год не пользовался. а еслиб разсусоливал, то врятли бы смотрел.
@grayich
@grayich 2 жыл бұрын
@@vrabosh даже для таких это слишком, даже междупауз нет
@eugenebubnov8468
@eugenebubnov8468 Жыл бұрын
Отвратительная подача материала... Куда лектор торопиться-то?
@TheKirp777
@TheKirp777 9 ай бұрын
Может, со словарями, а не с словарями? Ты робот что ли?
@zproger
@zproger 9 ай бұрын
именно)
@mammadalimammadaliyev6105
@mammadalimammadaliyev6105 2 жыл бұрын
Отписка за незнание синтаксиса кортежа
@zproger
@zproger 2 жыл бұрын
Просто забыл запятую поставить, с кем не бывает Но можете отписываться, никто не держит
@luispakvard5681
@luispakvard5681 2 жыл бұрын
Об'єднати списки в словник можна так: 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
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 3,1 МЛН
Hoodie gets wicked makeover! 😲
00:47
Justin Flom
Рет қаралды 134 МЛН
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 2 МЛН
When Cucumbers Meet PVC Pipe The Results Are Wild! 🤭
00:44
Crafty Buddy
Рет қаралды 57 МЛН
Как работают словари в Python | Хэш-таблицы [Any]
23:02
Павлин Шарит - ИТ вместе с Николаем Павлиным
Рет қаралды 1,9 М.
Как выучить Python БЫСТРО используя ChatGPT?
10:10
10 признаков того, что вы новичок в Python
4:59
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 221 М.
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 3,1 МЛН