Словари (dict, dictionary) в python

Built-in Dictionary Functions & Methods

Python includes the following dictionary functions −

Sr.No. Function with Description
1 cmp(dict1, dict2)

Compares elements of both dict.

2 len(dict)

Gives the total length of the dictionary. This would be equal to the number of items in the dictionary.

3 str(dict)

Produces a printable string representation of a dictionary

4 type(variable)

Returns the type of the passed variable. If passed variable is dictionary, then it would return a dictionary type.

Python includes following dictionary methods −

Sr.No. Methods with Description
1 dict.clear()

Removes all elements of dictionary dict

2 dict.copy()

Returns a shallow copy of dictionary dict

3 dict.fromkeys()

Create a new dictionary with keys from seq and values set to value.

4 dict.get(key, default=None)

For key key, returns value or default if key not in dictionary

5 dict.has_key(key)

Returns true if key in dictionary dict, false otherwise

6 dict.items()

Returns a list of dict‘s (key, value) tuple pairs

7 dict.keys()

Returns list of dictionary dict’s keys

8 dict.setdefault(key, default=None)

Similar to get(), but will set dict=default if key is not already in dict

9 dict.update(dict2)

Adds dictionary dict2‘s key-values pairs to dict

10 dict.values()

Returns list of dictionary dict‘s values

Previous Page
Print Page

Next Page  

Методы словарей Python

В словарях есть специальные методы, которые можно использовать:

d.get(ключ)

Метод get() позволяет получить значение. Ему нужно указать ключ для поиска. Можно вернуть значение по умолчанию, если ключ не будет найден. По умолчанию это None:

>>> print(sample_dict.get('address'))
None
>>> print(sample_dict.get('address', 'Not Found'))
Not Found

Первый пример иллюстрирует, что происходит, если попытаться получить ключ, которого не существует без установки значения get по умолчанию. В этом случае метод возвращается None.

Во втором примере показано, как установить по умолчанию строку “Not Found”.

d.clear()

Метод clear() используется, чтобы удалить все элементы из словаря.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> sample_dict
{'email': 'jdoe@gmail.com', 'first_name': 'James', 'last_name': 'Doe'}
>>> sample_dict.clear()
>>> sample_dict
{}

d.copy()

Чтобы создать простую копию словаря, используется метод copy().

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> copied_dict = sample_dict.copy()
>>> copied_dict
{'email': 'jdoe@gmail.com', 'first_name': 'James', 'last_name': 'Doe'}

Если в словаре есть объекты или словари, то можно столкнуться с логическими ошибками. Так как изменение одного словаря может повлиять на его копию. В этом случае необходимо использовать модуль Python copy, в котором есть функция deepcopy(). Она создаетотдельную копию словаря.

d.Items()

Метод items() возвращает новое представление из элементов словаря.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> sample_dict.items()
dict_items()

Этот объект представления будет меняться по мере изменения самого словаря.

d.keys()

Чтобы получить представление ключей, которые есть в словаре, используется метод keys(). Он предоставляет динамическое представление ключей словаря. Можно представление, а также проверить принадлежность представлению по ключевому слову in.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> keys = sample_dict.keys()
>>> keys
dict_keys()
>>> 'email' in keys
True
>>> len(keys)
3

d.values()

Метод values() возвращает объект динамического представления значений словаря.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> values = sample_dict.values()
>>> values
dict_values()
>>> 'Doe' in values
True
>>> len(values)
3

d.pop(ключ)

Чтобы удалить ключ из словаря, используется метод pop(). Он принимает ключ и строку параметра по умолчанию. Если не установить значение по умолчанию и ключ не будет найден, то выведется ошибка KeyError.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> sample_dict.pop('something')
Traceback (most recent call last):
Python Shell, prompt 146, line 1
builtins.KeyError: 'something'
>>> sample_dict.pop('something', 'Not found!')
'Not found!'
>>> sample_dict.pop('first_name')
'James'
>>> sample_dict
{'email': 'jdoe@gmail.com', 'last_name': 'Doe'}

d.popitem()

Метод popitem() используется для удаления и возвращает пары ключ-значение из словаря в порядке «последним добавлен — первым удален». Если метод вызывается в пустом словаре, то отобразится KeyError.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> sample_dict.popitem()
('email', 'jdoe@gmail.com')
>>> sample_dict
{'first_name': 'James', 'last_name': 'Doe'}

d.update()

Метод обновляет словарь другими парами ключ-значение, перезаписывая существующие ключи. Возвращает None.

>>> sample_dict = {'first_name': 'James', 'last_name': 'Doe', 'email': 'jdoe@gmail.com'}
>>> sample_dict.update()
>>> sample_dict
{'email': 'jdoe@gmail.com',
'first_name': 'James',
'last_name': 'Doe',
'something': 'else'}

Merge two dictionaries using update() method

The update() method will help us to merge one dictionary with another. In the example, we will update the my_dict1 with my_dict2. After using update() method the my_dict1 will have the contents of my_dict2 as shown below:

my_dict1 = {"username": "XYZ", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it.", "location":"Mumbai"}

my_dict2 = {"firstName" : "Nick", "lastName": "Price"}

my_dict1.update(my_dict2)

print(my_dict1)

Output:

{'username': 'XYZ', 'email': This email address is being protected from spambots. You need JavaScript enabled to view it.', 'location': 'Mumbai', 'firstName': 'Nick', 'lastName': 'Price'}

Методы словарей Python

Методы, доступные для использования со словарем, приведены в таблице ниже. Некоторые из них уже были использованы в приведенных выше примерах.

  • clear() — Удалить все элементы из словаря.
  • copy() — Возвращает копию словаря.
  • fromkeys(seq ) — Возвращает новый словарь с ключами от seq и значением, равным v (по умолчанию None).
  • get(key ) — Возвращает значение ключа. Если ключ не существует, возвращает d (по умолчанию None).
  • items() — Возвращает новый вид элементов словаря (ключ, значение).
  • keys() — Возвращает новый вид ключей словаря.
  • pop(key ) — Удалить элемент с ключом и вернуть его значение или d, если ключ не найден. Если d не указано и ключ не найден, выдается KeyError.
  • popitem() — Удалить и вернуть произвольный элемент (ключ, значение). Вызывает KeyError, если словарь пуст.
  • setdefault(ключ ) — Если ключ находится в словаре, вернуть его значение. Если нет, введите ключ со значением d и верните d (по умолчанию None).
  • update() — Обновить словарь парами ключ / значение из других, перезаписывая существующие ключи.
  • values() — Возвращает новое представление значений словаря

Вот несколько примеров использования этих методов.

marks = {}.fromkeys(, 0)

# результат: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)

for item in marks.items():
print(item)

# результат: 
list(sorted(marks.keys()))

Поверхностные и глубокие копии словарей

Иногда может получиться так, что несколько ссылок могут ссылаться на один и тот же словарь, в этом случае изменение словаря по одной переменной приведет к тому, что другие переменные уже не будут ссылаться на прежние данные:

Сейчас и ссылаются на один и тот же словарь, теперь изменим словарь посредством переменной :

Но и теперь ссылается на тот же самый словарь:

Если необходимо что бы переменные ссылались на разные данные, то можно выполнить поверхностную копию, с помощью метода :

Однако, поверхностное копирование не позволяет скопировать данные из вложенных списков и словарей:

Если мы сейчас присвоим поверхностную копию переменной , то мы получим два словаря, вложенные структуры которых все равно будут ссылаться на одни и теже данные:

Но данные вложенного списка и словаря являются общими:

Что бы выполнить глубокое (полное) копирование данных и всех вложенных структур, можно воспользоваться модулем из стандартной библиотеки. Сначала импортируем его:

А затем, с помощью функции выполняем глубокое копирование:

После чего мы получаем два, совершенно никак не связанных словаря:

Перебор элементов словаря

Можно легко организовать перебор ключей всех элементов в словаре:

A = dict(zip('abcdef', list(range(6))))
for key in A:
    print(key, A)

Следующие методы возвращают представления элементов словаря.
Представления во многом похожи на множества, но они изменяются,
если менять значения элементов словаря. Метод
возвращает представление ключей всех элементов, метод
возвращает представление всех значений, а метод
возвращает представление всех пар (кортежей) из ключей и значений.

Соответственно, быстро проверить, есть ли значение
среди всех значений элементов словаря можно так:
, а организовать цикл так, чтобы
в переменной был ключ элемента, а в переменной ,
было его значение можно так:

Built-in Dictionary Functions

Python Dictionary provides the following methods

  1. clear() – Removes all items.
  2. copy() – Shallow copy.
  3. fromkeys() – Returns a new dictionary, where keys start from a sequence and values equal to values.
  4. get() – Value of a Given Key.
  5. items() – Returns a list containing the dictionary items (key, value pairs)
  6. keys() – Prints a list of keys
  7. pop() – Remove and prints the value of a given key.
  8. popitem() – Remove and prints the last inserted key-value pair. 
  9. setdefault() – If the given key is present, it returns its value. If not, this function insert key with a given value, and prints that value.
  10. update() – Update the Key-Value pair.
  11. values() – Returns the list of all the values.

Python List cmp() Method

The compare method cmp() is used in Python to compare values and keys of two dictionaries. If method returns 0 if both dictionaries are equal, 1 if dic1 > dict2 and -1 if dict1 < dict2.

Python 2 Example

Boys = {'Tim': 18,'Charlie':12,'Robert':25}
Girls = {'Tiffany':22}	
print cmp(Girls, Boys)

Python 3 Example

cmp is not supported in Python 3
  • We have two dictionary name, «Boys» and «Girls.»
  • Whichever you declare first in code «cmp(Girls, Boys)» will be considered as dictionary 1. In our case, we declared «Girls» first, so it will be considered as dictionary 1 and boys as dictionary 2
  • When code is executed, it prints out -1, It indicates that our dictionary 1 is less than dictionary 2.

Создание словаря

Пустой словарь можно создать при помощи функции или
пустой пары фигурных скобок (вот почему фигурные скобки
нельзя использовать для создания пустого множества). Для создания словаря
с некоторым набором начальных значений можно использовать следующие конструкции:

Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'}
Capitals = dict(Russia = 'Moscow', Ukraine = 'Kiev', USA = 'Washington')
Capitals = dict()
Capitals = dict(zip(, ))
print(Capitals)

Первые два способа можно использовать только для создания небольших словарей, перечисляя все их элементы.
Кроме того, во втором способе ключи передаются как именованные параметры функции , поэтому
в этом случае ключи могут быть только строками, причем являющимися корректными идентификаторами.
В третьем и четвертом случае можно создавать большие словари, если в качестве аргументов
передавать уже готовые списки, которые могут быть получены не обязательно перечислением всех элементов,
а любым другим способом построены по ходу исполнения программы. В третьем способе
функции нужно передать список, каждый элемент которого является кортежем
из двух элементов: ключа и значения. В четвертом способе используется функция ,
которой передаются два списка одинаковой длины: список ключей и список значений.

Первый шаг: создание словаря

В работе со словарем первым шагом является его создание. Это не слишком сложно, вам просто следует передать правильную последовательность нужных элементов. Записывается эта последовательность вот в такие фигурные скобки: { }. Выносим отдельно, что каждый элемент должен отделяться запятыми. По итогу выходит, что каждый элемент должен обладать парой “ключ: значение”.

Обращаем ваше внимание, что значения могут быть совершенно любыми, а кроме того, они даже могут повторяться. НО! Самое главное: ваш ключ необходимо сделать уникальным

Самый первый случай — как происходит создание полностью пустого словаря в Python:

dict_sample = { }

А здесь приводим пример словаря, где ключи будут заданы целыми числами:

dict_sample = {1: ‘cat’, 2: ‘dog’}

Еще один пример, где встречаются ключи, обладающие разными типами:

dict_sample = {‘animal’: ‘cat’, 1: }

Кроме того, вы можете сделать словарь с помощью dict ( ):

dict_sample = dict({2:’cat’, 4:’dog’})

Есть еще способ, используя последовательность. Ловите наш пример:

dict_sample = dict()

Для того, чтобы произвести вывод содержимого словаря, вам нужно использовать функцию print ( ). После этого название словаря нужно задать как аргумент. Чтобы вам было более понятно, приведем пример:

dict_sample = {«Name»: «Ivan»,

«Surname»: «Ivanov»,

«Age»: 99}

print (dict_sample)

В итоге получим такой вот результат:

{‘Name’: ‘Ivan’, ‘Surname’: ‘Ivanov’, ‘Age’: 99}

Как получить доступ к элементам

Если вы хотите получить доступ к элементам любого словаря, следует записать ключ в квадратных скобках . Вот вам пример:

dict_sample = { «Name»: «Ivan»,

«Surname»: «Petrov»}

x = dict_sample

print (x)

В выводе мы получаем:

Petrov

Хотим вынести, что программисты также могут воспользоваться функцией get ( ), если хотят получить доступ к выбранным словарям. Get ( ) добавляют через точку, а потом просто задают имя нужного словаря как функцию. Смотрите, как это делается:

dict_sample = {«Name»: «Ivan»,

«Surname»: «Ivanov«,

«Age»: 99}

x = dict_sample.get(«Surname»)

print (x)

Результат вот такой:

Ivanov

Сейчас вы уже понимаете, как быстро получать доступ к различным элементам в вашем словаре. Тогда идем дальше.

Словари

Словарь Python, по большей части, представляет собой хэш-таблицу. В некоторых языках, словари могут упоминаться как ассоциативная память, или ассоциативные массивы. Они индексируются при помощи ключей, которые могут быть любого неизменяемого типа. Например, строка или число могут быть ключом. Вам обязательно стоит запомнить тот факт, что словарь – это неупорядоченный набор пар ключ:значение, и ключи обязательно должны быть уникальными.

Вы можете получить список ключей путем вызова метода keys() в том или ином словаря. Чтобы проверить, присутствует ли ключ в словаре, вы можете использовать ключ in в Python. В некоторых старых версиях Python (с 2.3 и более ранних, если быть точным), вы увидите ключевое слово has_key, которое используется для проверки наличия ключа в словаре. Данный ключ является устаревшим в Python 2.X, и был удален, начиная с версии 3.Х. Давайте попробуем создать наш первый словарь:

Python

my_dict = {}
another_dict = dict()

my_other_dict = {«one»:1, «two»:2, «three»:3}
print(my_other_dict) # {‘three’: 3, ‘two’: 2, ‘one’: 1}

1
2
3
4
5

my_dict={}

another_dict=dict()

my_other_dict={«one»1,»two»2,»three»3}

print(my_other_dict)# {‘three’: 3, ‘two’: 2, ‘one’: 1}

Первые два примера показывают, как создавать пустой словарь. Все словари находятся в фигурных скобках. Последняя строчка показывает, что мы имеем в виду, когда говорим «неупорядоченный словарь». Теперь настало время узнать, как принимаются значения в словаре.

Python

my_other_dict = {«one»:1, «two»:2, «three»:3}

print(my_other_dict) # 1

my_dict = {«name»:»Mike», «address»:»123 Happy Way»}
print(my_dict) # ‘Mike’

1
2
3
4
5
6

my_other_dict={«one»1,»two»2,»three»3}

print(my_other_dict»one»)# 1

my_dict={«name»»Mike»,»address»»123 Happy Way»}

print(my_dict»name»)# ‘Mike’

В первом примере, мы использовали словарь из предыдущего примере, и вытащили значение, связанное с ключом под названием one. Второй пример демонстрирует, как задавать значение ключу name. Теперь попробуем узнать, находится ли ключ в словаре или нет:

Python

print(«name» in my_dict) # True

print(«state» in my_dict) # False

1
2
3

print(«name»inmy_dict)# True

print(«state»inmy_dict)# False

Что-ж, если ключ в словаре, Python выдает нам Boolean True. В противном случае, мы получаем Boolean False. Если вам нужно получить список ключей  в словаре, вам нужно сделать следующее:

Python

print(my_dict.keys()) # dict_keys()

1 print(my_dict.keys())# dict_keys()

В Python 2, метод keys дает нам список. Но в Python 3 он дает объект view. Это дает разработчику возможность обновлять словарь, так что view также обновится

Обратите внимание на то, что когда мы используем ключевое слово in для текста содержимого словаря, лучше будет сделать это в словаре, а не в списке, выдаваемом методом keys. Смотрим ниже:

Python

if «name» in my_dict # Такая конструкция правильная

if «name» in my_dict.keys() # Работает но медленее

1
2
3

if»name»inmy_dict# Такая конструкция правильная

if»name»inmy_dict.keys()# Работает но медленее

Пока это, возможно, не говорит вам о многом, во время реальной работы ситуация будет другая и каждая секунда будет важна. При создании тысячи файлов для обработки, эти маленькие хитрости могут уберечь вас от бесполезной траты времени.

Delete Dictionary Elements

You can either remove individual dictionary elements or clear the entire contents of a dictionary. You can also delete entire dictionary in a single operation.

To explicitly remove an entire dictionary, just use the del statement. Following is a simple example −

#!/usr/bin/python3

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

del dict # remove entry with key 'Name'
dict.clear()     # remove all entries in dict
del dict         # delete entire dictionary

print ("dict: ", dict)
print ("dict: ", dict)

This produces the following result.

An exception is raised because after del dict, the dictionary does not exist anymore.

dict:
Traceback (most recent call last):
   File "test.py", line 8, in <module>
      print "dict: ", dict;
TypeError: 'type' object is unsubscriptable

Note − The del() method is discussed in subsequent section.

Python Dictionary Methods

Methods that are available with a dictionary are tabulated below. Some of them have already been used in the above examples.

Method Description
clear() Removes all items from the dictionary.
copy() Returns a shallow copy of the dictionary.
fromkeys(seq) Returns a new dictionary with keys from seq and value equal to v (defaults to ).
get(key) Returns the value of the key. If the key does not exist, returns d (defaults to ).
items() Return a new object of the dictionary’s items in (key, value) format.
keys() Returns a new object of the dictionary’s keys.
pop(key) Removes the item with the key and returns its value or d if key is not found. If d is not provided and the key is not found, it raises .
popitem() Removes and returns an arbitrary item (key, value). Raises if the dictionary is empty.
setdefault(key) Returns the corresponding value if the key is in the dictionary. If not, inserts the key with a value of d and returns d (defaults to ).
update() Updates the dictionary with the key/value pairs from other, overwriting existing keys.
values() Returns a new object of the dictionary’s values

Here are a few example use cases of these methods.

Output

{'Math': 0, 'English': 0, 'Science': 0}
('Math', 0)
('English', 0)
('Science', 0)

Accessing Values in Dictionary

To access dictionary elements, you can use the familiar square brackets along with the key to obtain its value. Following is a simple example −

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict: ", dict
print "dict: ", dict

When the above code is executed, it produces the following result −

dict:  Zara
dict:  7

If we attempt to access a data item with a key, which is not part of the dictionary, we get an error as follows −

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict: ", dict

When the above code is executed, it produces the following result −

dict:
Traceback (most recent call last):
   File "test.py", line 4, in <module>
      print "dict: ", dict;
KeyError: 'Alice'

Updating Dictionary

You can also update a dictionary by adding a new entry or a key-value pair to an existing entry or by deleting an existing entry. Here in the example, we will add another name, «Sarah» to our existing dictionary.

Python 2 Example

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}	
Dict.update({"Sarah":9})
print Dict

Python 3 Example

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}	
Dict.update({"Sarah":9})
print(Dict)
  • Our existing dictionary «Dict» does not have the name «Sarah.»
  • We use the method Dict.update to add Sarah to our existing dictionary
  • Now run the code, it adds Sarah to our existing dictionary

Delete Keys from the dictionary

Python dictionary gives you the liberty to delete any element from the dictionary list. Suppose you don’t want the name Charlie in the list, so you can remove the key element by the following code.

Python 2 Example

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}	
del Dict 
print Dict

Python 3 Example

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}	
del Dict 
print(Dict)

When you run this code, it should print the dictionary list without Charlie.

  • We used the code del Dict
  • When code executed, it has deleted the Charlie from the main dictionary

Dictionary items() Method

The items() method returns a list of tuple pairs (Keys, Value) in the dictionary.

Python 2 Example

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}	
print "Students Name: %s" % Dict.items()

Python 3 Example

Dict = {'Tim': 18,'Charlie':12,'Tiffany':22,'Robert':25}	
print("Students Name: %s" % list(Dict.items()))
  • We use the code items() method for our Dict.
  • When code was executed, it returns a list of items ( keys and values) from the dictionary

Sort a Dictionary in Python by Key

Method 1: Use operator.itemgetter() (Recommended method for older versions of Python)

Now, if you want to sort a Dictionary by Key, we can use the method, like in the last section. The only change that we have to make is to sort the list based on keys now, so we call .

import operator

my_dict = {2: 10, 1: 2, -3: 1234}

# Sort the Dict based on keys
sorted_dict = dict(sorted(my_dict.items(), key=operator.itemgetter(0)))

print(sorted_dict)

Output

{-3: 1234, 1: 2, 2: 10}

Indeed, the dictionary has been sorted based on the Key now!

Method 2: Use sorted() with a lambda (Recommended method for Python 3.6+)

We can again use the method, with a lambda, on newer versions of Python.

Again, this is the same as before, but we’ll be now sorting based on value.

my_dict = {2: 10, 1: 2, -3: 1234}
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item))

Output

{-3: 1234, 1: 2, 2: 10}

Again, the output is the same as before.

Python Dictionary Methods

Python has a set of built-in methods that you can invoke on dictionary objects.

Python Dictionary Methods
Method Description
clear() Removes all items from the dictionary
copy() Returns a shallow copy of the dictionary
fromkeys() Creates a new dictionary with the specified keys and values
get() Returns the value of the specified key
items() Returns a list of key:value pair
keys() Returns a list of all keys from dictionary
pop() Removes and returns single dictionary item with specified key.
popitem() Removes and returns last inserted key:value pair from the dictionary.
setdefault() Returns the value of the specified key, if present. Else, inserts the key with a specified value.
update() Updates the dictionary with the specified key:value pairs
values() Returns a list of all values from dictionary
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector