10 полезни метода в речника на Python

Искате ли да научите как да работите с речници на Python? Този урок ще обхване методите на речника на Python за четене, модифициране и извършване на други обичайни операции с речници на Python.

Ще започнем с преглед на основите на речниците на Python и след това ще създадем примерен речник и ще го модифицираме с помощта на методите на речника на Python.

Да започваме…

Общ преглед на речниците на Python

Речниците са вградени структури от данни в Python. Позволява ви да съхранявате елементи в двойки ключ-стойност – дефиниране на асоциация или съпоставяне между ключовете и стойностите.

Ключовете в речника трябва да са уникални (за да могат да се хешират). Можете да използвате ключа, за да търсите стойността или да използвате вградени методи (ще ги научите скоро).

Когато създавате речник на Python, можете да инициализирате всички двойки ключ-стойност или да инициализирате празен речник и след това да добавите двойките ключ-стойност.

>>> dict1 = {'language':'Python','like':True}
>>> type(dict1)
<class 'dict'>

# or we can do the following:

>>> dict1 = {}
>>> dict1['language']='Python'
>>> dict1['like']=True

Методи на речника на Python за общи операции

Забележка: За да следвате заедно с примерите за код, трябва да имате инсталиран Python 3.7 или по-нова версия.

Можете да кодирате заедно в Python REPL. Или следвайте в онлайн редактора на Python на pctechbg.net.

>>> person = {'name':'Alice',
...           'city':'Portland',
...           'interest':'Programming',
...           'profession':'Developer'
...           }

Сега, след като инициализирахме речник на Python, нека започнем да разглеждаме различните методи на речника.

Вземете ключовете на речника с keys()

Една от обичайните операции при работа с речник на Python е достъпът до всички ключове, стойности и двойки ключ-стойност. За да получите ключовете на речник, можете да извикате метода keys(), както е показано:

>>> person.keys()
dict_keys(['name', 'city', 'interest', 'profession'])

Вземете стойностите на речника със values()

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

  Кое е най-безопасното през 2023 г.?

Нека получим достъп до всички стойности в речника на лицето:

>>> person.values()
dict_values(['Alice', 'Portland', 'Programming', 'Developer'])

Вземете двойки ключ-стойност с items()

Методът items() връща списък с кортежи ключ-стойности. Следователно извикването на този метод в речника на лицето връща списък с кортежи ключ-стойност:

>>> person.items()
dict_items([('name', 'Alice'), ('city', 'Portland'), ('interest', 'Programming'), 
           ('profession', 'Developer')])

Вземете плитко копие с copy()

Методът copy() връща плитко копие на речник на Python.

>>> person_cpy = person.copy()

Тук person_cpy е плитко копие на речника на person. Нека модифицираме това копие, като актуализираме ключа „име“ на „Боб“.

>>> person_cpy['name'] = 'Bob'
>>> person_cpy

Сега, ако прегледате съдържанието на речника, можете да видите, че „името“ е актуализирано на „Боб“.

{
 'name': 'Bob', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer'
}

Оригиналният речник на лицата обаче не е променен.

>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer'
}

Задайте стойности по подразбиране с setdefault()

Когато работите с речници на Python, обичайно е да се сблъскате с изключение KeyError, ако ключът не присъства в речника. Ето пример, когато се опитваме да получим достъп до ключа „възраст“:

>>> person['age']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'age'

Можете да избегнете такива грешки, като използвате вградените методи setdefault() и get() вместо достъп до стойността, както по-горе.

Методът setdefault(key) връща dict[‘key’] ако ключът присъства в dict.

>>> person.setdefault('name')
'Alice'

Когато ключът не присъства, той добавя ключа към речника със стойност по подразбиране Няма.

>>> person.setdefault('address')
>>> person

Тук ключът „адрес“ не присъства в речника на лицето. Но виждаме, че е добавен със стойността по подразбиране None.

{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': None 
}

Вече можем да настроим ключа ‘address’ на някакъв адрес:

>>> person['address'] = "10, xyz street"
>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': '10, xyz street' 
}

Можете също да посочите стойността в извикването на метода, както е показано:

>>> person.setdefault('country','USA')
'USA'
>>> person

Тъй като ключът „страна“ не присъства първоначално в речника на лицето, виждаме, че той е добавен с „САЩ“ като стойност.

{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': '10, xyz street', 
 'country': 'USA'
}

Вземете конкретна стойност с get()

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

  Какво е Slack Channel Analytics?

Когато се опитаме да получим достъп до стойността на ключа „име“, получаваме „Алиса“, тъй като ключът присъства лично:

>>> person.get('name')
'Alice'

Речникът на лицата няма ключ „gpa“. Така че, когато се опитваме да получим неговата стойност, не получаваме нищо в Python REPL. Ако обаче отпечатате стойността, ще получите Няма.

>>> person.get('gpa')
>>> print(person.get('gpa'))
None

Но ако предоставите незадължителната стойност по подразбиране, ние получаваме тази стойност вместо None.

>>> person.get('gpa','not found')
'not found'

Методът get() обаче не добавя ключа ‘gpa’ към речника.

>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': '10, xyz street', 
 'country': 'USA'
}

Разбиране на setdefault() срещу get()

Въпреки че и методите setdefault() и get() могат да се използват за обработка на KeyError, нека обобщим разликите от това, което научихме:

  • dict.setdefault(key,val) добавя ключа с val като стойност по подразбиране. Ако val не е предоставен, ключът се добавя със стойността по подразбиране None.
  • dict.get(key,val) връща стойността, съответстваща на ключа от речника на Python. Ако ключът не присъства, той връща val (ако е предоставен) или None, но не добавя ключа към речника.

Можете също да използвате defaultdict в Python, за да се справите по-добре с KeyErrors.

Актуализирайте съдържанието на речника с update()

Можете да актуализирате съществуващ речник на Python, като използвате двойки ключ-стойност от друг речник. Можете също така да актуализирате със съдържанието на всеки итерируем Python, като използвате метода update().

Нека дефинираме more_details речник. След това актуализираме речника на лицето със съдържание от речника more_details:

>>> more_details = {'hobby':'singing', 'likes':'sweets'}
>>> person.update(more_details)

От резултата по-долу виждаме, че ключовете „хоби“ и „харесвания“ са добавени към речника на човека.

>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': '10, xyz street', 
 'country': 'USA', 
 'hobby': 'singing', 
 'likes': 'sweets'
}

Премахнете последния добавен елемент с popitem()

Методът на речника popitem() може да се използва за премахване на последно добавената двойка ключ-стойност.

>>> person.popitem()
('likes', 'sweets')

Както се вижда, извикването на метода popitem() в речника на лицето връща двойката ключ-стойност (‘likes’, ‘sweets’) — последният добавен елемент в речника.

Той също така премахва двойката ключ-стойност. Можете да потвърдите това, като прегледате съдържанието на речника:

>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': '10, xyz street', 
 'country': 'USA', 
 'hobby': 'singing'
}

Премахване на елемент от речника с pop()

Знаем, че методът на речника popitem() премахва и връща последната двойка ключ-стойност в речник на Python. Въпреки това понякога може да се наложи да премахнем други елементи – различни от последно добавената двойка ключ-стойност.

  как да използвате Screen [Guide]

За да направим това, можем да използваме метода на речника на Python pop(): използването на .pop(key) в речника връща стойността, съответстваща на ключа, и също така премахва двойката ключ-стойност от речника.

Ето един пример:

>>> person.pop('hobby')
'singing'

Тъй като извадихме елемента, съответстващ на ключа „хоби“, виждаме, че той вече не присъства в речника.

>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': '10, xyz street', 
 'country': 'USA'
}

Ако подадем ключ, който не съществува, се натъкваме на изключение KeyError, както е показано:

>>> person.pop('age')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'age'

Тук попадаме на изключение KeyError, тъй като ключът „възраст“ не присъства в речника на лицето.

За разлика от метода list pop(), който премахва последния елемент по подразбиране, методът pop() на речника изисква ключ. Ако не посочите ключ в метода, ще се натъкнем на грешки.

>>> person.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 argument, got 0

Изтриване на всички елементи от речника с clear()

Методите на речника pop() и popitem() премахват по една двойка ключ-стойност. Ако искате да изтриете всички елементи в речник, можете да използвате метода clear().

>>> person.clear()
>>> person
{}

Както се вижда, извикването на метода clear() в речника на лицето премахва всички двойки ключ-стойност и речникът на лицето вече е празен.

Резюме на методите на речника на Python

Ето кратък преглед на методите на речника на Python, които научихме.

MethodSyntaxDescriptionkeys()dict1.keys()Връща ключовете на dict1values()dict1.values()Връща стойностите на dict1items()dict1.items()Връща списък на всички двойки ключ-стойност в dict1copy()dict1.copy() Връща плитко копие на dict1setdefault()dict1.setdefault(key, default_value)– Добавя ключ с незадължителната default_value като ключ към dict1 (когато не е указано, стойността по подразбиране е None)
– Връща dict1[key] ако ключът вече е presentget()dict1.get(key,default_value)– Връща dict1[key] ако ключът присъства в dict1; В противен случай връща default_value
– Ако ключът не присъства в dict1 и default_value не е посочен, връща Noneupdate()dict1.update(iterable1) Актуализира dict1 с двойки ключ-стойност от iterable1popitem()dict1.popitem()Премахва и връща последната двойка ключ-стойност от dict1pop()dict1.pop(key)– Премахва и връща стойността, съответстваща на ключа: dict1[key]
– Поражда KeyError, ако ключът не присъства в dict1clear()dict1.clear() Изтрива всички елементи от dict1

Заключение

Научихте как да използвате общи методи за извършване на операции за четене, актуализиране и изтриване на речници на Python. Освен това научихте също как методите get() и setdefault() могат да се използват за обработка на изключения KeyError чрез връщане на стойност по подразбиране и съответно добавяне на запис със стойност по подразбиране към речника на Python. Можете също така да сортирате речник на Python по ключ или по стойност.

След това вижте списъка с полезни списъчни методи на Python. Приятно кодиране!