130 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			130 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: The Python Dict | |||
|  | localeTitle: Диктатор Питона | |||
|  | --- | |||
|  | Словарь (aka «dict») в python - это встроенный тип данных, который можно использовать для хранения пар **`key-value`** . Это позволяет вам обращаться с **`dict`** как с _базой данных_ для хранения и организации данных. | |||
|  | 
 | |||
|  | Особенность словарей в том, как они реализованы. Хэш-табличная структура упрощает проверку существование - это означает, что мы можем легко определить, присутствует ли в словаре конкретный ключ без необходимости изучения каждый элемент. Интерпретатор Python может просто перейти к ключу местоположения и проверить, есть ли ключ. | |||
|  | 
 | |||
|  | Словари могут использовать практически любые произвольные типы данных, такие как строки, целые числа и т. Д. Для ключей. Однако значения, которые не являются хешируемыми, то есть значения, содержащие списки, словари или другие изменяемые типы (которые сравниваются по значению, а не по идентификатору объекта), могут не использоваться в качестве ключей. Числовые типы, используемые для ключей, подчиняются нормальным правилам для числового сравнения: если два числа сравниваются равными (например, `1` и `1.0` ), то они могут использоваться взаимозаменяемо для индексации одной и той же словарной записи. (Обратите внимание, однако, что, поскольку компьютеры хранят числа с плавающей запятой в качестве приближений, как правило, неразумно использовать их в качестве словарных ключей.) | |||
|  | 
 | |||
|  | Одним из важнейших требований словаря является то, что ключи **должны** быть уникальными.   | |||
|  | Чтобы создать пустой словарь, просто используйте пару фигурных скобок: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> teams = {}  | |||
|  |     >>> type(teams)  | |||
|  |     >>> <class 'dict'>  | |||
|  | ``` | |||
|  | 
 | |||
|  |    | |||
|  | Чтобы создать непустой словарь с некоторыми начальными значениями, поместите разделенный запятыми список пар ключ-значение: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> teams = {'barcelona': 1875, 'chelsea': 1910}  | |||
|  |     >>> teams  | |||
|  |     {'barcelona': 1875, 'chelsea': 1910}  | |||
|  | ``` | |||
|  | 
 | |||
|  | Легко добавить пары ключ-значение в существующий словарь: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> teams['santos'] = 1787  | |||
|  |     >>> teams  | |||
|  |     {'chelsea': 1910, 'barcelona': 1875, 'santos': 1787} # Notice the order - Dictionaries are unordered !  | |||
|  |     >>> # extracting value - Just provide the key  | |||
|  |     ...  | |||
|  |     >>> teams['barcelona']  | |||
|  |     1875  | |||
|  | ``` | |||
|  | 
 | |||
|  |    | |||
|  | **`del`** используется для удаления пары ключ-значение из dict. В сценариях, где ключ, который уже используется, снова используется для хранения значений, старое значение, связанное с этим ключом, полностью теряется. Кроме того, имейте в виду, что это ошибка для извлечения значения с использованием несуществующего ключа. | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> del teams['santos']  | |||
|  |     >>> teams  | |||
|  |     {'chelsea': 1910, 'barcelona': 1875}  | |||
|  |     >>> teams['chelsea'] = 2017 # overwriting  | |||
|  |     >>> teams  | |||
|  |     {'chelsea': 2017, 'barcelona': 1875}  | |||
|  | ``` | |||
|  | 
 | |||
|  |    | |||
|  | **`in`** ключевом слове может быть использована для проверки , существует ли ключ в Словаре или нет: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> 'sanots' in teams  | |||
|  |     False  | |||
|  |     >>> 'barcelona' in teams  | |||
|  |     True  | |||
|  |     >>> 'chelsea' not in teams  | |||
|  |     False  | |||
|  | ``` | |||
|  | 
 | |||
|  |    | |||
|  | **`keys`** - это встроенный _метод,_ который можно использовать для получения ключей данного словаря. Чтобы извлечь ключи, присутствующие в списках dict: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> club_names = list(teams.keys())  | |||
|  |     >>> club_names  | |||
|  |     ['chelsea', 'barcelona']  | |||
|  | ``` | |||
|  | 
 | |||
|  |    | |||
|  | Еще один способ создания словаря - использовать метод **`dict()`** : | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> players = dict( [('messi','argentina'), ('ronaldo','portugal'), ('kaka','brazil')] ) # sequence of key-value pair is passed  | |||
|  |     >>> players  | |||
|  |     {'ronaldo': 'portugal', 'kaka': 'brazil', 'messi': 'argentina'}  | |||
|  |     >>>  | |||
|  |     >>> # If keys are simple strings, it's quite easier to specify pairs using keyword arguments  | |||
|  |     ...  | |||
|  |     >>> dict( totti = 38, zidane = 43 )  | |||
|  |     {'zidane': 43, 'totti': 38}  | |||
|  | ``` | |||
|  | 
 | |||
|  | Понимание Dict также может быть использовано для создания словарей из произвольных выражений ключа и значения: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> {x: x**2 for x in (2, 4, 6)}  | |||
|  |     {2: 4, 4: 16, 6: 36}  | |||
|  | ``` | |||
|  | 
 | |||
|  | **Цикл в словаре**   | |||
|  | Чтобы просто перебрать ключи в словаре, а не клавиши и значения: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> d = {'x': 1, 'y': 2, 'z': 3}  | |||
|  |     >>> for key in d:  | |||
|  |     ...     print(key) # do something  | |||
|  |     ...  | |||
|  |     x  | |||
|  |     y  | |||
|  |     z  | |||
|  | ``` | |||
|  | 
 | |||
|  | Чтобы перебрать оба ключа и значения, вы можете использовать следующее:   | |||
|  | Для Python 2.x: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> for key, item in d.iteritems():  | |||
|  |     ...     print items  | |||
|  |     ...  | |||
|  |     1  | |||
|  |     2  | |||
|  |     3  | |||
|  | ``` | |||
|  | 
 | |||
|  | Используйте **`items()`** для Python 3.x: | |||
|  | 
 | |||
|  | ```python | |||
|  |     >>> for key, item in d.items():  | |||
|  |     ...     print(key, items)  | |||
|  |     ...  | |||
|  |     x 1  | |||
|  |     y 2  | |||
|  |     z 3  | |||
|  | 
 | |||
|  | ``` |