Разбиране на речника на Python

В този урок ще научим за разбирането на речника на Python и как да го използваме с помощта на примери.

Речниците са типове данни в Python, които ни позволяват да съхраняваме данни в двойка ключ / стойност . Например:

 my_dict = (1: 'apple', 2: 'ball') 

За да научите повече за тях, посетете: Python Dictionary

Какво е разбиране на речника в Python?

Разбирането на речника е елегантен и кратък начин за създаване на речници.

Пример 1: Разбиране на речника

Обмислете следния код:

 square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict) 

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

 # dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict) 

Резултатът от двете програми ще бъде еднакъв.

 (1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100)

И в двете програми създадохме речник square_dictс двойка ключ / стойност число-квадрат .

Използването на разбиране на речника обаче ни позволи да създадем речник в един ред .

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

От горния пример можем да видим, че разбирането на речника трябва да бъде написано по определен модел.

Минималният синтаксис за разбиране на речника е:

 речник = (ключ: стойност за vars в iterable) 

Нека сравним този синтаксис с разбирането на речника от горния пример.

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

Пример 3: Как се използва разбирането на речника

 #item price in dollars old_price = ('milk': 1.02, 'coffee': 2.5, 'bread': 2.5) dollar_to_pound = 0.76 new_price = (item: value*dollar_to_pound for (item, value) in old_price.items()) print(new_price) 

Изход

 („мляко“: 0,7752, „кафе“: 1,9, „хляб“: 1,9) 

Тук можем да видим, че получихме цените на артикулите в долари и ги превърнахме в лири. Използването на разбиране на речника прави тази задача много по-опростена и по-кратка.

Условни условия за разбиране на речника

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

Пример 4: Ако условното разбиране на речника

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) even_dict = (k: v for (k, v) in original_dict.items() if v % 2 == 0) print(even_dict) 

Изход

 („jack“: 38, „michael“: 48) 

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

Пример 5: Множество, ако е условно разбиране на речника

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict = (k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40) print(new_dict) 

Изход

 („Джон“: 33) 

В този случай само елементите с нечетна стойност по-малка от 40 са добавени към новия речник.

Това се дължи на множеството ifклаузи в разбирането на речника. Те са еквивалентни на andработа, при която и двете условия трябва да са верни.

Пример 6: Разбиране на условен речник ако-иначе

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict_1 = (k: ('old' if v> 40 else 'young') for (k, v) in original_dict.items()) print(new_dict_1) 

Изход

 ('jack': 'young', 'michael': 'old', 'guideo': 'old', 'john': 'young') 

В този случай се създава нов речник чрез разбиране на речника.

Елементите със стойност 40 или повече имат стойността на "стар", докато други имат стойността на "млад".

Разбиране на вложен речник

Можем да добавим разбиране на речника към самите разбирания на речника, за да създадем вложени речници. Нека разгледаме един пример.

Пример 7: Вложен речник с две разбирания на речника

 dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary) 

Изход

 (2: (1: 2, 2: 4, 3: 6, 4: 8, 5: 10), 3: (1: 3, 2: 6, 3: 9, 4: 12, 5: 15), 4 : (1: 4, 2: 8, 3: 12, 4: 16, 5: 20)) 

Както можете да видите, ние сме изградили таблица за умножение в вложен речник за числа от 2 до 4.

Винаги, когато се използва разбиране на вложен речник, Python първо започва от външния цикъл и след това преминава към вътрешния.

Така че горният код би бил еквивалентен на:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = (k2: k1*k2 for k2 in range(1, 6)) print(dictionary) 

По-нататък може да се разгъне:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = dict() for k2 in range(1, 6): dictionary(k1)(k2) = k1*k2 print(dictionary) 

Всички тези три програми ни дават еднакви резултати.

Предимства на използването на разбиране на речника

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

Използването на разбиране на речника в нашия код може да съкрати редовете на кода, като същевременно запази логиката непокътната.

Предупреждения за използване на разбиране на речника

Въпреки че разбирането на речника е чудесно за писане на елегантен код, който е лесен за четене, те не винаги са правилният избор.

Трябва да внимаваме, докато ги използваме като:

  • Те понякога могат да накарат кода да работи по-бавно и да консумира повече памет.
  • Те могат също да намалят четливостта на кода.

Не трябва да се опитваме да вместим в тях трудна логика или голям брой разбирания на речника, само за да направим кода еднолицев. В тези случаи е по-добре да изберете други алтернативи като контури.

Интересни статии...