ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ (dict, dictionary) Π² Python

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. codecamp editorial. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-codecamp editorial. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° codecamp editorial. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. dict dictionary Python. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-dict dictionary Python. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° dict dictionary Python. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Доступ ΠΊ значСниям словаря

Π‘Ρ‚Ρ€ΠΎΠΊΠ° «Hello» Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ называСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска значСния Π² словарС, помСщая ΠΊΠ»ΡŽΡ‡ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки.

Число 1234 Π²ΠΈΠ΄Π½ΠΎ послС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ двоСточия Π² словарС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π΅Π΄Ρ‘Ρ‚ «Hello» Π² словарС.

x = dictionary.get(«whatever», «nuh-uh»)

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ dict()

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ dict() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания словарСй ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ словаря ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Как ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ KeyError

Распространённая ошибка ΠΏΡ€ΠΈ использовании словарСй β€” доступ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ KeyError :

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ошибки β€” ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ»ΡŽΡ‡ словарС:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… срСдах ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· словаря послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, создавая состояниС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всё Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Доступ ΠΊ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈ значСниям

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со словарями часто трСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСм ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈ значСниям Π² словарС, Π² Ρ†ΠΈΠΊΠ»Π΅ for, Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ списка ΠΈΠ»ΠΈ просто Π² Π²ΠΈΠ΄Π΅ простого списка.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ keys ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dict_keys :

Если вмСсто этого Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ values ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dict_values :

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ items ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dict_ items :

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° словаря

Π§Π΅Ρ€Π΅Π· встроСнный класс dict()

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ словаря

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ список ΠΈΠ»ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² качСствС значСния:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΈΠ· словаря:

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Доступно Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠ°ΠΊ defaultdict

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, dict.setdefault() Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния (Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ a[]) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ вызываСтся, создавая лишнюю Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ упорядочСнный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ упорядочСнный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ порядку ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² словарС.

Распаковка словарСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° **

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ распаковки ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° слова ** для доставки ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² словарС Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

Начиная с Python 3.5 Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот синтаксис для объСдинСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ числа ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² [ dict ].

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ послСднСму Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«ΠšΠ»ΠΈΡ„Ρ„ΠΎΡ€Π΄Β» пСрСопрСдСляСт «НСмо»).

ОбъСдинСний словарСй

Рассмотрим Ρ€Π°Π·Π½Ρ‹Π΅ словари:

Python 3.5+

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ послСднСму Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«ΠšΠ»ΠΈΡ„Ρ„ΠΎΡ€Π΄Β» пСрСопрСдСляСт «НСмо»).

Python 3.3+

Π—Π΄Π΅ΡΡŒ пСрвостСпСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ отдаётся ΠΊΠΎΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ, Π° Π½Π΅ послСднСму (Β«ΠšΠ»ΠΈΡ„Ρ„ΠΎΡ€Π΄Β» выбрасываСтся Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ «НСмо»).

Python 2.x, 3.x

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ слияния [**] (Β«ΠšΠ»ΠΈΡ„Ρ„ΠΎΡ€Π΄Β» пСрСопрСдСляСт «НСмо»).

Π—Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰Π°Ρ запятая

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π² списках ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΡƒΡŽ Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² своСм словарС.

PEP 8 Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ оставляли ΠΏΡ€ΠΎΠ±Π΅Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰Π΅ΠΉ запятой ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобкой.

ВсС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ список, хранящийся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ combinations :

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ словаря

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² качСствС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ for ), ΠΎΠ½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ΠΈ Π² словарС. НапримСр:

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…:

ΠœΠ΅Ρ‚ΠΎΠ΄ items() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ зацикливания ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния:

ΠœΠ΅Ρ‚ΠΎΠ΄ values() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря

ΠŸΡ€Π°Π²ΠΈΠ»Π° создания словаря:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ словарСй

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ΠΈ со значСниями

Доступ ΠΊ значСниям словаря осущСствляСтся ΠΏΠΎ ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π°ΠΌ

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы Π² стилС JSON:

ЗначСния словаря ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Π½Ρ‹:

Бинтаксис

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

Π§Ρ‚ΠΎ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ использовании словаря:

– ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ (ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½);

– ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ…ΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ (для Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ примСняСтся функция hash) Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ TypeError;

– для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ порядка.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Screenshot 2019 05 2. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-Screenshot 2019 05 2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Screenshot 2019 05 2. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Научим основам Python ΠΈ Data Science Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСоритичСский курс, Π° ΠΎΠ½Π»Π°ΠΉΠ½-Ρ‚Ρ€Π΅Π½Π°ΠΆΠ΅Ρ€, с ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π·Π°Π΄Π°Ρ‡, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π² любоС ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ врСмя 24/7. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚, разрабатывая качСствСнный ΠΊΠΎΠ΄ ΠΈ анализируя Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй

НСкоторыС Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности языка Python нСзаслуТСнно оставлСны Π±Π΅Π· внимания ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты ΠΎ Π½ΠΈΡ… Π½Π΅ Π·Π½Π°ΡŽΡ‚. Π’ этот Ρ€Π°Π· Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ прСкрасной возмоТности языка, Π΄Π΅Π»Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ΄ яснСС: Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй β€” однострочныС выраТСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. Но Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² списков ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ удалСния Π½Π΅ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

Π‘ΡƒΠ΄Π΅Ρ‚ интСрСсно Π² основном Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ Π² Python.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ однострочноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка. Он довольно часто примСняСтся, ΠΈ я встрСчал Π΅Π³ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.
ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ список. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” функция range(start, end), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числа ΠΌΠ΅ΠΆΠ΄Ρƒ start ΠΈ end. Начиная с вСрсии Python 3.0 ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ сразу ΠΏΠΎΠ»Π½Ρ‹ΠΉ список, Π° Π²Ρ‹Π΄Π°Π΅Ρ‚ число Π·Π° числом ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Π’ Python 2.* для этого использовалась функция xrange(). ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка чисСл ΠΎΡ‚ 1 Π΄ΠΎ 10 ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π°, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Π’Π°ΠΊ выглядит Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ список Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ синтаксис Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½Π΅ΡˆΡŒ β€” ΠΊΠΎΠ΄ станСт ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ понятнСС.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ²

Другая часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π°ΡΡΡ Π·Π°Π΄Π°Ρ‡Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ мноТСством ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
Допустим ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Ρ‚Π°ΠΊΠΈΠΌ списком:

Π‘Π°ΠΌΡ‹ΠΉ слоТный способ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ встрСчался, выглядит Ρ‚Π°ΠΊ:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΈ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный Ρ‚ΠΈΠΏ мноТСство(set). ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ссли ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Π²ΠΎ мноТСство β€” Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ удалятся. Но ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ мноТСство Π° Π½Π΅ список, поэтому Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ список ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π·:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

БовсСм другая ситуация с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ словарями. НапримСр Ρƒ нас Π΅ΡΡ‚ΡŒ список словарСй, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ большим ΠΈΠ»ΠΈ мСньшим количСством ΠΊΠΎΠ΄Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‡Π΅ΠΌ мСньшС β€” Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅! Π”Π»ΠΈΠ½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

МоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΡƒΠ·Π½Π°Π» ΠΏΠ°Ρ€Ρƒ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄: Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй. Они ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков синтаксис, Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

Если ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅ с использованиС этой Ρ„ΠΈΡ‡ΠΈ, останСтся всСго ΠΎΠ΄Π½Π° сточка:

Π’ этой строчкС ΠΊΠΎΠ΄Π° создаСтся ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ приняли Π·Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π·Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° values() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС значСния ΠΈΠ· созданного словаря. Π’.ΠΊ. ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ большС ΠΎΠ΄Π½ΠΎΠΉ записи для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° β€” ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² ΠΈΡ‚ΠΎΠ³Π΅ список Π½Π΅ содСрТит Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ.
Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Python 3.0 ΠΈ бэкпортирована Π² Python 2.7, Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:

ГСнСрируСтся список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ (ΠΏΠ°Ρ€) ΠΈ пСрСдаСтся ΠΈΡ… конструктору dict(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π΅Ρ€Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всё Ρ‚ΠΎΠΉ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РСализация словаря Π² Python 2.7

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² Python. Π― ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос, ΠΏΠΎΡ‡Π΅ΠΌΡƒ элСмСнты словаря Π½Π΅ упорядочСны, ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ словари хранят, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ свои элСмСнты. НадСюсь, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ людям, ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ Python, Π½ΠΎ ΠΈ всСм, ΠΊΡ‚ΠΎ интСрСсуСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ устройством ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ структур Π΄Π°Π½Π½Ρ‹Ρ….

На написаниС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ мСня Π½Π°Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ» вопрос Π½Π° Stack Overflow.
Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассматриваСтся рСализация CPython вСрсии 2.7. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΉ вСрсии Python Π½Π° 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ОБ, для Π΄Ρ€ΡƒΠ³ΠΎΠΉ вСрсии значСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Π² Python

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Π² Python являСтся ассоциативным массивом, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ – измСнСняСмый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ· словаря. Он Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ поиска ΠΈ возвращСния элСмСнта ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов:

ΠšΠ»ΡŽΡ‡Π°ΠΌΠΈ словаря ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ hashable Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ…ΡΡˆ (для этого Ρƒ Π½ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __hash__()). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ значСния Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ список (list), Π½Π°Π±ΠΎΡ€ (set) ΠΈ собствСнно сам ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (dict), Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ словаря:

РСализация

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Π² Python Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π²ΠΈΠ΄Π΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Как извСстно, рСализация Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появлСния ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ – ситуаций, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ…ΡΡˆΠ°. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ способ вставки ΠΈ извлСчСния элСмСнтов с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. БущСствуСт нСсколько способов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации. Π’ Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π²Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… с Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°ΠΌΠΈ.

Π’ рассматриваСмой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ каТдая запись (PyDictEntry) Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ словаря состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… элСмСнтов – Ρ…ΡΡˆ, ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° PyDictObject выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° словаря Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ 8. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ опрСдСляСтся константой PyDict_MINSIZE. Для хранСния Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² PyDictObject Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ma_smalltable ΠΈ ma_table. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ma_smalltable с ΠΏΡ€Π΅Π΄Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ PyDict_MINSIZE (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 8) позволяСт нСбольшим словарям (Π΄ΠΎ 8 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² PyDictEntry) Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выдСлСния памяти. ЭкспСримСнты, ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ этого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΏΠΎΠ»Π½Π΅ достаточно для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° словарСй: Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… словарСй экзСмпляров ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… словарСй, созданных для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (kwargs). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ma_table соотвСтствуСт ma_smalltable для ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ· 8 ячССк). Для Ρ‚Π°Π±Π»ΠΈΡ† большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ma_table выдСляСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ma_table Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Π° NULL.

Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π²Π΄Ρ€ΡƒΠ³ захочСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PyDict_MINSIZE, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² исходниках, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Python. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ стСпСни Π΄Π²ΠΎΠΉΠΊΠΈ, Π½ΠΎ Π½Π΅ мСньшС Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ….

Π―Ρ‡Π΅ΠΉΠΊΠ° Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ состояния

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ структуры

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ тонкости

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ зависит ΠΎΡ‚ наличия Β«Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ…Β» Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Β«Π₯ΠΎΡ€ΠΎΡˆΠ°ΡΒ» Ρ…ΡΡˆ-функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ быстро ΠΈ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. Но, ΠΊ соТалСнию, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (для строкового ΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΎΠ²) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ достаточно рСгулярныС значСния, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ коллизиям. Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Для Ρ†Π΅Π»Ρ‹Ρ… чисСл Ρ…ΡΡˆΠ°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΡ… значСния, поэтому подряд ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ числа Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ подряд ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ Ρ…ΡΡˆΠΈ, Π° для строк подряд ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ строки ΠΈΠΌΠ΅ΡŽΡ‚ практичСски подряд ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ Ρ…ΡΡˆΠΈ. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2**i взятиС i ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π±ΠΈΡ‚ Ρ…ΡΡˆΠ° ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ выполняСтся ΠΎΡ‡Π΅Π½ΡŒ быстро, ΠΈ для словарСй, проиндСксированных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅:

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π’ΠΎ ΠΆΠ΅ самоС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ, Ссли ΠΊΠ»ΡŽΡ‡ΠΈ словаря – это «подряд ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅Β» строки (ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅). Π’ ΠΎΠ±Ρ‰ΠΈΡ… случаях это Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ случайноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ трСбуСтся.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ВзятиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ i ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π±ΠΈΡ‚ Ρ…ΡΡˆΠ° Π² качСствС индСкса Ρ‚Π°ΠΊΠΆΠ΅ уязвимо ΠΊ коллизиям: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ список [i 011 2 & 111 2 = 011 2 = 3

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ индСкс рассчитан, выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ячСйки ΠΏΠΎ индСксу, ΠΈ Ссли ΠΎΠ½Π° «нСиспользованная», Ρ‚ΠΎ Π² Π½Π΅Ρ‘ добавляСтся запись (Ρ…ΡΡˆ, ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Но Ссли эта ячСйка занята, ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ другая запись ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ…ΡΡˆ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° коллизия), выполняСтся сравнСниС Ρ…ΡΡˆΠ° ΠΈ ΠΊΠ»ΡŽΡ‡Π° вставляСмой записи ΠΈ записи Π² ячСйкС. Если Ρ…ΡΡˆ ΠΈ ΠΊΠ»ΡŽΡ‡ для записСй ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‚ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ запись ΡƒΠΆΠ΅ сущСствуСт Π² словарС, ΠΈ выполняСтся Π΅Ρ‘ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, связанный с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π²Π½Ρ‹Ρ… ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, float, int ΠΈ complex):

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π°, нСсмотря Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ рСализация Ρ…ΡΡˆΠ° для float Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ…ΡΡˆ ΠΎΡ‚ int, Ссли дробная Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° 0.0. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ расчёта Ρ…ΡΡˆΠ° для float, пСрСписанный Π½Π° Python:

А Ρ…ΡΡˆ ΠΎΡ‚ complex Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ…ΡΡˆ ΠΎΡ‚ float. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС возвращаСтся Ρ…ΡΡˆ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ мнимая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° Π½ΡƒΠ»ΡŽ:

Π’Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈ Ρ…ΡΡˆΠΈ, ΠΈ значСния для всСх Ρ‚Ρ€Ρ‘Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π²Π½Ρ‹, выполняСтся простоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ значСния Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ записи.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ добавлСния элСмСнтов: Python Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, поэтому ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ошибка:

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ индСксы добавляСмых Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ элСмСнтов зависят ΠΎΡ‚ ΡƒΠΆΠ΅ находящихся Π² Π½Ρ‘ΠΌ элСмСнтов, ΠΈ порядок ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π΄Π²ΡƒΡ… словарСй, состоящих ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΈ опрСдСляСтся ΠΎΡ‡Π΅Ρ€Ρ‘Π΄Π½ΠΎΡΡ‚ΡŒΡŽ добавлСния элСмСнтов:

Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ словари Π² Python ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ содСрТимого ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Ρ‹ (ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) Π½Π΅ Π² порядкС ΠΈΡ… добавлСния Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ выводят ΠΈΡ… Π² порядкС располоТСния Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² порядкС индСксов).

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° вставка ΠΏΠΎ индСксу 5. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ma_fill ΠΈ ma_used стали Ρ€Π°Π²Π½Ρ‹ 1.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° вставка ΠΏΠΎ индСксу 0. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ma_fill ΠΈ ma_used стали Ρ€Π°Π²Π½Ρ‹ 2.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° вставка ΠΏΠΎ индСксу 4. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ma_fill ΠΈ ma_used стали Ρ€Π°Π²Π½Ρ‹ 3.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° вставка ΠΏΠΎ индСксу 1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ma_fill ΠΈ ma_used стали Ρ€Π°Π²Π½Ρ‹ 4.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡˆΠ΅ΡΡ‚ΠΎΠΉ элСмСнт Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ПослС добавлСния ΡˆΠ΅ΡΡ‚ΠΎΠ³ΠΎ элСмСнта Ρ‚Π°Π±Π»ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π° 2/3, Π° соотвСтствСнно, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Ρ‘ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ измСнится (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС увСличится Π² 4 Ρ€Π°Π·Π°), ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ полная пСрСстройка Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° – всС Β«Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅Β» ячСйки Π±ΡƒΠ΄ΡƒΡ‚ пСрСраспрСдСлСны, Π° «пустыС» ΠΈ Β«Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅Β» ячСйки Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Π Π°Π·ΠΌΠ΅Ρ€ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π΅Π½ 32, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ma_fill ΠΈ ma_used стали Ρ€Π°Π²Π½Ρ‹ 6. Как Π²ΠΈΠ΄Π½ΠΎ, порядок элСмСнтов ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ помСнялся:

Поиск элСмСнта

Поиск записи Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ словаря происходит Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½Π°Ρ‡ΠΈΠ½Π°ΡΡΡŒ с ячСйки i, Π³Π΄Π΅ i зависит ΠΎΡ‚ Ρ…ΡΡˆΠ° ΠΊΠ»ΡŽΡ‡Π°. Если Ρ…ΡΡˆ ΠΈ ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с Ρ…ΡΡˆΠΎΠΌ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ записи (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Ρ‹Π»Π° коллизия ΠΈ Π½Π°Π΄ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ запись) – начинаСтся ΠΏΡ€ΠΎΠ±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ продолТаСтся, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° запись, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…ΡΡˆ ΠΈ ΠΊΠ»ΡŽΡ‡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Если ΠΆΠ΅ всС ячСйки Π±Ρ‹Π»ΠΈ просмотрСны, Π½ΠΎ запись Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, возвращаСтся ошибка.

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ заполнСния Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ измСняСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° заполняСтся Π½Π° 2/3. Π’ΠΎ Π΅ΡΡ‚ΡŒ для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ словаря, Ρ€Π°Π²Π½ΠΎΠ³ΠΎ 8, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ 6 элСмСнт.

ΠŸΡ€ΠΈ этом происходит пСрСстройка Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π΅Ρ‘ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π° соотвСтствСнно, ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ индСксы всСх записСй.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2/3 ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Ρ‹Π»ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ вставка Π½ΠΎΠ²ΠΎΠΉ записи происходила быстро. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ этого значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠ»ΠΎΡ‚Π½Π΅Π΅ заполняСтся записями, Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. УмСньшСниС ΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ записСй Π² ΡƒΡ‰Π΅Ρ€Π± увСличСния Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ кэш-Π»ΠΈΠ½ΠΈΠΉ процСссора ΠΈ Π² ΡƒΡ‰Π΅Ρ€Π± увСличСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ объСма памяти. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° заполнСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ происходит Π² вСсьма Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ участкС ΠΊΠΎΠ΄Π°. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ слоТной (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, измСняя коэффициСнт заполнСния для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ измСняСтся, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ возвращаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ всСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° PyDictObject для 64-Π±ΠΈΡ‚Π½ΠΎΠΉ вСрсии ОБ.
ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π²Π΅Π½ 8. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° число Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ячССк Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 6 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ большС 2/3 ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°), Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ увСличится Π΄ΠΎ 32. Π—Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° число Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 22, увСличится Π΄ΠΎ 128. ΠŸΡ€ΠΈ 86 увСличится Π΄ΠΎ 512, ΠΏΡ€ΠΈ 342 – Π΄ΠΎ 2048 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈ достиТСнии максимального уровня заполнСния Ρ€Π°Π²Π΅Π½ 4, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ мСньшС 50000 элСмСнтов, ΠΈ 2 – для Ρ‚Π°Π±Π»ΠΈΡ† большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ прилоТСниям с ограничСниями ΠΏΠΎ памяти.

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΡΡ€Π΅Π΄Π½ΡŽΡŽ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π±Ρ€ΠΎΡΠ°Π½Π½ΠΎΡΡ‚ΡŒ записСй ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ словаря (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ), Π·Π° счёт увСличСния объСма потрСбляСмой памяти ΠΈ скорости ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство дорогостоящих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния памяти ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для растущСго словаря.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² 4 ΠΈΠ»ΠΈ 2 Ρ€Π°Π·Π° Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° словаря, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ. Вакая ситуация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли ma_fill (количСство Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, сумма Β«Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ…Β» ΠΈ «пустых» ячССк) Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС ma_used (количСство Β«Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ…Β» ячССк), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнта ΠΈΠ· словаря вызываСтся функция PyDict_DelItem.
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· словаря происходит ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, хотя Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ освобоТдСния памяти Π½Π΅ происходит. Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вычисляСтся Ρ…ΡΡˆ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°, Π° Π·Π°Ρ‚Π΅ΠΌ происходит поиск записи Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с использованиСм всё Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lookdict_string ΠΈΠ»ΠΈ lookdict. Π’ случаС Ссли запись с Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ Ρ…ΡΡˆΠ΅ΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π°, ΠΊΠ»ΡŽΡ‡ этой записи выставляСтся Π² состояниС «пустой» (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ me_key = dummy), Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ записи – Π² NULL (me_value = NULL). ПослС этого пСрСмСнная ma_used ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π° ma_fill останСтся Π±Π΅Π· измСнСния. Если ΠΆΠ΅ запись Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, возвращаСтся ошибка.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ПослС удалСния пСрСмСнная ma_used стала Ρ€Π°Π²Π½Π° 4, Π° ma_fill ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Ρ€Π°Π²Π½ΠΎΠΉ 5, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ячСйка Π½Π΅ Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π°, Π° всСго лишь Π±Ρ‹Π»Π° ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ «пустая» ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ячСйку Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Рандомизация Ρ…ΡΡˆΠ΅ΠΉ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Ρƒ Dictionary ΠΈ ConcurrentDictionary

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ΅Ρ…Π°Π»ΠΈ.

Если Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с самим Dictionary, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π».

Dictionary прСдставляСт собой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартной Hashtable.
Π—Π΄Π΅ΡΡŒ интСрСсны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ происходит Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ создании (Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ), Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² качСствС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ блиТайшСС простоС число (3). ΠŸΡ€ΠΈ этом ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ 2 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ β€” int[] buckets ΠΈ Entry[] entries. ΠŸΠ΅Ρ€Π²Π°Ρ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ индСксы элСмСнтов Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π° ΠΎΠ½Π°, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, β€” сами элСмСнты Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта вычисляСтся Ρ…ΡΡˆΠΊΠΎΠ΄ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π·Π°Ρ‚Π΅ΠΌ β€” индСкс ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΎΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ:

Π’Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.
Π—Π°Ρ‚Π΅ΠΌ провСряСтся Π½Π΅Ρ‚ Π»ΠΈ ΡƒΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ссли Π΅ΡΡ‚ΡŒ β€” Ρ‚ΠΎ опСрация Add выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° присваиваниС ΠΏΠΎ индСксу просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ элСмСнт Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ. Если достигнут ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря, Ρ‚ΠΎ происходит Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ (выбираСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ блиТайшим простым числом).
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Ρ†ΠΈΠΈ соотвСтствСнно β€” O(n).

Если происходит коллизия (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ с индСксов bucketNum ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ элСмСнт), Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт добавляСтся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π΅Π³ΠΎ индСкс сохраняСтся Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅, Π° индСкс старого элСмСнта β€” Π² Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ next.
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ связный список. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ называСтся chaining. Если ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта число ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π²Π΅Π»ΠΈΠΊΠΎ (большС 100 Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии), Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ происходит опСрация ΠΏΠ΅Ρ€Π΅Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ выбираСтся Π½ΠΎΠ²Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ…ΡΡˆΠΊΠΎΠ΄ΠΎΠ².
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния O(1) ΠΈΠ»ΠΈ O(n) Π² случаС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов ΠΌΡ‹ Π·Π°Ρ‚ΠΈΡ€Π°Π΅ΠΌ Π΅Π³ΠΎ содСрТимоС значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, мСняСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ next Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов ΠΏΡ€ΠΈ нСоходимости ΠΈ сохраняСм индСкс этого элСмСнта Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΏΠΎΠ»Π΅ freeList, Π° староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π² ΠΏΠΎΠ»Π΅ next. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ свободныС ячСйки:
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ снова O(1) ΠΈΠ»ΠΈ O(n) Π² случаС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠ΅

Π’Π°ΠΊ ΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ 2 ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:
1) ΠŸΡ€ΠΈ очисткС словаря, Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ измСняСтся. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ, Π²Ρ‹ просто Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ мСсто.
2) GetEnumerator просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ entires (ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(1)). Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляли элСмСнты β€” ΠΎΠ½ΠΈ вСрнутся Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС. Однако Ссли Π²Ρ‹ удаляли элСмСнты ΠΈ добавляли Π½ΠΎΠ²Ρ‹Π΅ β€” порядок соотвСтствСнно измСнится, поэтому Π½Π° Π½Π΅Π³ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π΅ стоит (Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ).

Π’Π°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ с ConcurrentDictionary?

Казалось Π±Ρ‹, Π΅ΡΡ‚ΡŒ 2 Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Π»ΠΎΠ± для обСспСчСния потокобСзопасности β€” ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС обращСния ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ Π² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Π½ΠΈΡ… ΠΆΠ΅. Однако, ΠΏΠΎ понятным ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ β€” Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, добавляСмыС lock, Π΄Π° ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° 1 ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ³ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ быстродСйствия.

Π’ Microsoft пошли Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΈ Dictionary ΠΏΡ€ΠΈΡ‚Π΅Ρ€ΠΏΠ΅Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния. Π’Π°ΠΊ, благодаря Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структурС словаря ΠΈ Π΅Π³ΠΎ ΠΊΠΎΡ€Π·ΠΈΠ½, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° осущСствляСтся ΠΏΠΎ Π½ΠΈΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π΅ смог Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этой схСмой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив entries, поэтому ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ стали ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ single linked list: volatile Entry[] m_buckets (ΠΏΠΎΠ»Π΅ объявлСно ΠΊΠ°ΠΊ volitale, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ситуации ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ стали Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. image loader. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ Mapping Π² Python. Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΊΠ»ΡŽΡ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ словари ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Π² Π½ΠΈΡ… быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ссылки Π½Π° элСмСнты ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

lockNo β€” это индСкс Π² Π½ΠΎΠ²ΠΎΠΌ массивС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ синхронизации β€” object[] m_locks. Π•Π³ΠΎ использованиС позволяСт Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя. Π Π°Π·ΠΌΠ΅Ρ€ этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ зависит ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ConcurrencyLevel ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· конструктор. Он опрСдСляСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это число_процСссоров * 4). Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ станут Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ всСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Resize, ToArray, Count, IsEmpty, Keys, Values, CopyTo, Clear). Π’Π°ΠΊΠΆΠ΅ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт сколько элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ приходится Π½Π° ΠΎΠ΄ΠΈΠ½ lock (ΠΊΠ°ΠΊ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ числа ΠΊΠΎΡ€Π·ΠΈΠ½ ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ) ΠΈ ΠΊΠΎΠ³Π΄Π° элСмСнтов становится большС, Ρ‡Π΅ΠΌ Π½Π°Π΄ΠΎ β€” коллСкция Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС поиск элСмСнта Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ O(1), Π° ΡƒΠΆΠ΅ O(n) Π·Π° счСт ΠΎΠ±Ρ…ΠΎΠ΄Π° связных списков. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ число ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря ΡƒΠΆΠ΅ Π½Π΅ 3, Π° 31.

ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»ΠΈ Π²ΠΈΠ΄:

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта приходится ΠΎΠ±ΠΎΠΉΡ‚ΠΈ вСсь связанный список просто Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ Ссли Π½Π΅Ρ‚ β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. Аналогично ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ β€” спСрва Π½Π°Π΄ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ·Π΅Π» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π½ΡƒΠΆΠ½Π° Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ β€” это TryGetValue, GetEnumerator, ContainsKey ΠΈ индСксация. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΡ€Π·ΠΈΠ½ Π²ΠΈΠ΄Π½Ρ‹ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ volatile, Π»ΡŽΠ±Ρ‹Π΅ добавлСния ΠΈΠ»ΠΈ измСнСния элСмСнтов происходят ΠΏΡƒΡ‚Π΅ΠΌ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠΌ старого, Π° удалСния происходят просто Π·Π°ΠΌΠ΅Π½ΠΎΠΉ указатСля Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π».

Π”Ρ€ΡƒΠ³ΠΎΠ΅

Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ dictionary.Select(x => x.Value).ToArray(), Ρ‡Π΅ΠΌ dictionary.Values.ToArray()

И это Π½Π΅ совсСм Π²Π΅Ρ€Π½ΠΎ β€” вмСсто Β«Π»ΡƒΡ‡ΡˆΠ΅Β» Ρ‚ΡƒΡ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ «быстрСС» β€” Π·Π° счСт отсутствия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π½ΠΎ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *