logo

__dict__ в Python

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

Когато се отнася за достъп до атрибути, точката '.' (както в x.any_attribute ) е всичко, с което повечето потребители са запознати. просто казано, достъпът до атрибути е процесът на получаване на обект, който е свързан с такъв, който вече имате . Може да изглежда много просто за някой, който използва Python, без да навлиза твърде далеч в спецификата. Има обаче много неща, които се случват зад кулисите за този сравнително прост процес.

Какво е _dict_?

Всеки модул има уникално свойство, наречено __дикт__. Този речник съдържа символната таблица за модула . Характеристиките (с възможност за запис) на даден елемент се съхраняват в речник или друг обект за картографиране.

Казано по-просто, всеки обект в Python има свойство, което е обозначено със символа __dict__ . Освен това този обект има всички свойства, които са били посочени за него. Друго име за __dict__ е mappingproxy обект. Можем да използваме речника чрез прилагане на свойството __dict__ към обект от клас.

Синтаксис :

 object.__dict__ 

Пример:

 class AnimalClass: def __init__(self,identity,age): self.identity = identity self.age = age def feature(self): if self.age == '10': return True else: return False ac = AnimalClass('Lion','10') print(ac.__dict__) 

Изход:

 {'identity': 'Lion', 'age': '10'} 

Пример 2:

Този пример ще покаже, че с помощта на атрибут __dict__ , може да се създаде речник от всеки обект:

 # class Flowers is defined class Flowers: # constructor def __init__(self): # keys are being initialized with # their corresponding values self.Rose = 'red' self.Lily = 'white' self.Lotus = 'pink' def displayit(self): print('The Dictionary from object fields belongs to the class Flowers :') # object animal of class Animals flower = Flowers() # calling displayit function flower.displayit() # calling the attribute __dict__ on flower # object and making it print it print(flower.__dict__) 

Изход:

 The Dictionary from object fields belongs to the class Flowers : {'Rose': 'red', 'Lily': 'white', 'Lotus': 'pink'} 

Пример 3:

 def funct(): pass funct.practice = 1 print(funct.__dict__) class PracticeClass: x = 1 def practice_function(self): pass print(PracticeClass.__dict__) 

Изход:

 {'practice': 1} {'__module__': '__main__', 'x': 1, 'practice_function': , '__dict__': , '__weakref__': , '__doc__': None} 

Използване на речник без използване на __dict__ в Python:

Създаване на речник:

В Python речник може да бъде направен чрез затваряне на a списък със записи във къдрави скоби и разделянето им със запетая . Речникът съхранява двойки стойности, където един елемент на двойка е ключът, а друг е негов Ключ: стойност . За разлика ключове, който не могат да се повтарят и трябва да бъдат неизменни, стойности в речниците могат да бъдат от всякакъв тип данни и могат да бъдат дублирани .

Елементите са разделени със запетаи , всеки ключ се разграничава от неговата стойност с двоеточие (:), и цялата структура се съдържа в къдрави скоби . Речник, който е напълно лишен от всякакви думи, е написан по следния начин: {} .

Ключовете на речника трябва да бъдат неизменен , като цели числа, кортежи или низове , въпреки че стойностите могат да бъдат от всякакъв тип. В речниците на Python едно и също име на ключ, изписано по различен начин, се счита за различен ключ. Моля, обърнете внимание на това ключовете на речника са чувствителни към главни и малки букви ; ключове с подобно име, но различен регистър ще бъдат обработени по различен начин.

Пример:

 # Creating a Dictionary # using Integer Keys only Dict = {1: 'JAVA', 2: 'T', 3: 'POINT'} print('
Creating a Dictionary by using Integer Keys : ') print(Dict) # Creating a Dictionary # using various Mixed keys Dict = {'Company': 'JavaTpoint', 7: [22, 35, 46, 97]} print('
Creating a Dictionary by using Mixed Keys : ') print(Dict) 

Изход:

 Creating a Dictionary by using Integer Keys : {1: 'JAVA', 2: 'T', 3: 'POINT'} Creating a Dictionary by using Mixed Keys : {'Company': 'JavaTpoint', 7: [22, 35, 46, 97]} 

The вграден метод dict() също позволява на създаване на речници . Просто казано две фигурни скоби {} заедно ще доведе до празен речник .

Пример:

 # Creating an empty Dictionary myDict = {} print('This is an Empty Dictionary: ') print(myDict) # Creating a Dictionary # using the dict() method myDict = dict({1: 'JAVA', 2: 'T', 3: 'POINT'}) print('
Creating a Dictionary by using the dict() method : ') print(myDict) # Creating a Dictionary # using each item as a different Pair myDict = dict([(1, 'JavaTpoint'), (2, 'Great')]) print('
Creating a Dictionary by using each item as a different pair : ') print(myDict) 

Изход:

 This is an Empty Dictionary: {} Creating a Dictionary by using the dict() method : {1: 'JAVA', 2: 'T', 3: 'POINT'} Creating a Dictionary by using each item as a different pair : {1: 'JavaTpoint', 2: 'Great'} 

Сложности при създаване на речник:

  • Времева сложност: O(дължина(дикт.))
  • Космическа сложност: На)

Вложени речници:

Това е форма на речник, където един или повече от един keys има речник, прикачен към него като стойност на ключа.

Пример:

 # Creating a Nested Dictionary # as mentioned above using a dictionary as a value to a key in # a dictionary myDict = dict({1: 'JAVA', 2: 'T', 3: 'POINT', 4: {1: 'JavaTpoint', 2: 'Great'}}) print('
Creating a Nested Dictionary : ') print(myDict) 

Изход:

 Creating a Nested Dictionary : {1: 'JAVA', 2: 'T', 3: 'POINT', 4: {1: 'JavaTpoint', 2: 'Great'}} 

Добавяне на елементи към речник:

Има няколко метода за добавяне на елементи към речник на Python. Чрез посочване на стойността и ключа заедно, например, Dict[Ключ] = 'Стойност', една стойност може да бъде добавена към речник наведнъж. Използвайки вградена функция update(). , може да се промени съществуваща стойност в речник. Съществуващ речник може също да бъде разширен с вложени ключови стойности .

реагираща таблица

Забележка: Когато добавяте стойност, стойността се актуализира, ако комбинацията ключ-стойност вече съществува. Ако не, нов ключ и стойност се добавят към речника.

Пример:

 # Creating Empty Dictionary myDict = {} print('Empty Dictionary: ') print(myDict) # Adding elements only one at a time myDict[0] = 'Java' myDict[3] = 'T' myDict[6] = 41 print('
Dictionary after the addition of 3 elements: ') print(myDict) # Adding a set of values # to a particular Key myDict['settingValues'] = 7, 8, 9 print('
Dictionary after the adding a set of values to a key : ') print(myDict) # Updating the existing Key's Value myDict[3] = 'tPoint' print('
Dictionary after Updated key value: ') print(myDict) # Adding Nested Key value to Dictionary myDict[8] = {'Nested' :{'A' : 'boy', 'B' : 'Girl'}} print('
Dictionary after Addition of a Nested Key: ') print(myDict) 

Изход:

 Empty Dictionary: {} Dictionary after the addition of 3 elements: {0: 'Java', 3: 'T', 6: 41} Dictionary after the adding a set of values to a key : {0: 'Java', 3: 'T', 6: 41, 'settingValues': (7, 8, 9)} Dictionary after Updated key value: {0: 'Java', 3: 'tPoint', 6: 41, 'settingValues': (7, 8, 9)} Dictionary after Addition of a Nested Key: {0: 'Java', 3: 'tPoint', 6: 41, 'settingValues': (7, 8, 9), 8: {'Nested': {'A': 'boy', 'B': 'Girl'}}} 

Сложности за добавяне на елементи към речник:

  • Времева сложност: O(1)/O(n)
  • Космическа сложност: О(1)

Достъп до елементите на речника:

Използва се речник ключове , докато други типове данни изискват индексиране за извличане на стойности. Ключовете могат да се използват с get() функция или в квадратни скоби [].

В случай, че a ключът не може да бъде намерен в речника, Произвежда се KeyError ако използваме квадратни скоби []. От друга страна, ако ключът не може да бъде открит, функцията get() връща нищо.

Пример:

 # Python program to demonstrate the # accessing of an element, from a Dictionary # Creating a Dictionary myDict = {1: 'Java', 'name': 'T', 2: 'Point', 4: 'Website'} # accessing an element using key print('Accessing an element using the key:') print(myDict['name']) print('Accessing another element using the key:') print(myDict[4]) # accessing an element using the get() method print('Accessing an using the get() method:') print(myDict.get(2)) print('Accessing another using the get() method:') print(myDict.get(1)) 

Изход:

 Accessing an element using the key: T Accessing another element using the key: Website Accessing an using the get() method: Point Accessing another using the get() method: Java 

Сложности за достъп до елементи в речник:

  • Времева сложност: О(1)
  • Космическа сложност: О(1)

Достъп до елемент на вложен речник:

Можем да вземем помощта на техника на индексиране []. за да получите стойността на съществуващ ключ в вложен речник .

Пример:

 # Creating a Dictionary myDict = {'myDict1': {3: 'JavatPoint'}, 'myDict2': {'Info.': 'Website'}} # Accessing the elements using the key print(myDict['myDict1']) print(myDict['myDict1'][3]) print(myDict['myDict2']['Info.']) 

Изход:

 {3: 'JavatPoint'} JavatPoint Website 

Методи на вградения речник:

ясно():

Функцията dict.clear() елиминира всяка двойка ключ-стойност от речника.

копие() :

А по-плитко копие на речника се връща от метода dict.copy().

низови методи java

fromkeys():

Използване на предоставения iterable (низ, списък, набор или кортеж) като ключове и посочената стойност, функцията dict.fromkeys() създава нов речник .

get() :

Това дава свързаната стойност с дадения ключ.

елементи():

А речников изглед обект , който предлага динамично представяне на елементите от речника като списък от двойки ключ-стойност се връща чрез функцията dict.items(). Когато речникът се актуализира, това обектът за преглед също се актуализира .

dict.keys() :

Функцията dict.keys() връща обект за изглед на речник с речника списък с ключове.

поп():

Това връща стойността на ключа след премахването му . Ако ключ липсва в речника, той или хвърля a KeyError или връща стойност по подразбиране ако е предоставен такъв.

напитка():

Това премахва един елемент от речника и връща кортеж от двойки (ключ, стойност). The Последно влязло, първо излязло (LIFO) последователността се използва за връщане на двойки.

setdefault():

Това връща стойността на речника за даден ключ . Ако ключът не може да бъде открит, ключът с предоставения стойност по подразбиране се добавя. Задава се Нито един като стойност по подразбиране ако не е доставен.

стойности() :

The обект за изглед на речник, който предлага динамичен изглед на всяка стойност, която е присъства в речника, се връща чрез функцията dict.values(). Когато речникът се актуализира, това обектът за преглед също се актуализира .

актуализация():

А речник или който и да е итерируем с двойки ключ-стойност , като например кортеж, може да се актуализира използвайки функцията dict.update().

Пример:

 # Example to demonstrate all dictionary methods #Creating a Dictionary mydict1={1:'HTML',2:'CSS',3:'Javascript',4:'Python'} #copy method mydict2=mydict1.copy() print(mydict2) #clear method mydict1.clear() print(mydict1) #get method print(mydict2.get(1)) #items method print(mydict2.items()) #keys method print(mydict2.keys()) #pop method mydict2.pop(4) print(mydict2) #popitem method mydict2.popitem() print(mydict2) #update method mydict2.update({2:'C++'}) print(mydict2) #values method print(mydict2.values()) 

Изход:

 {1: 'HTML', 2: 'CSS', 3: 'Javascript', 4: 'Python'} {} HTML dict_items([(1, 'HTML'), (2, 'CSS'), (3, 'Javascript'), (4, 'Python')]) dict_keys([1, 2, 3, 4]) {1: 'HTML', 2: 'CSS', 3: 'Javascript'} {1: 'HTML', 2: 'CSS'} {1: 'HTML', 2: 'C++'} dict_values(['HTML', 'C++']) 

Разлика между речник и списък:

Структури от данни като a списък и речник са коренно различни. Ан поръчани серии от артикули може да се съхранява в a списък така че да можем да го индексираме или да го обхождаме. Списъците също могат да бъдат променяни дори след като вече са били генерирани, тъй като те са променлив тип. The Python речник е съхранение на ключ-стойност и изпълнение на a хеш таблица . Той не следва никаква конкретна последователност и изисква хешируеми ключове. Освен това, той е бърз за ключови търсения.

А списъци елементи съдържат следните характеристики:

  • Освен ако не са изрично пренаредени, те запазете текущия си ред (например чрез сортиране на списъка).
  • Те могат да бъдат от всякакъв вид или дори комбинация от видове .
  • Чрез числени (базирани на нула) индекси, можем да имаме достъп до тях.

Характеристиките на речник елементи са както следва:

  • Всеки запис има a стойност и ключ .
  • Поръчките са не е гарантирано .
  • Ключови ценностисе използват за достъп до елементи.Всеки тип хеш-таблица (различен от dict)може да се използва за ключови стойности и типовете могат да се комбинират.Всякакъв вид стойност, включително други диктовки, е позволено , а видовете могат да се комбинират.

Употреба:

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

Заключение:

  • На компютърен език, речниците са вид структура от данни, използвана за съхранение на информация това по някакъв начин е свързано.
  • Всеки модул има уникално свойство, наречено __дикт__.
  • __dict__ съдържа символната таблица за модула .
  • Свойствата на даден елемент се съхраняват в a обект за картографиране.
  • Всеки обект в Python има a свойство, което е обозначено със символа __dict__ .
  • Друго име за __dict__ също е известно като mappingproxy обект.
  • Двата компонента на речника на Python се извикват Ключове и стойности .
  • Вие може да не получи вашите данни обратно в същия ред, в който ги въвеждате, тъй като речниците не съхраняват данните си в определен ред.
  • Ключовете ще се състоят само от едно нещо.
  • Ценностите могат да бъдат цели числа, списъци, списъци в списъци и т.н.
  • Не може да има повече от един запис на ключ (не се допуска дублиран ключ)
  • Ключовете на речника трябва да бъдат неизменен , като цели числа, кортежи или низове , въпреки че стойностите могат да бъдат от всякакъв тип.
  • Речник клавишите са чувствителни към главни и малки букви ; в речниците на Python едно и също име на ключ, изписано по различен начин, се счита за a различен ключ .