Понимание.метод get() в Python [дубликат]



этот вопрос уже есть ответ здесь:




  • Зачем диктовать.получить (ключ) вместо dict[ключ]?

    8 ответов



sentence = "The quick brown fox jumped over the lazy dog."
characters = {}

for character in sentence:
characters[character] = characters.get(character, 0) + 1

print(characters)


Я не понимаю, что characters.get(character, 0) + 1 делает, остальное все кажется довольно простым.

267   5  

5 ответов:

The get метод дикт (как, например,characters) работает так же, как индексирование dict, за исключением того, что, если ключ отсутствует, вместо того, чтобы поднять KeyError она возвращает значение по умолчанию (если вы называете .get только с одним аргументом, ключ, значение по умолчанию None).

таким образом, эквивалентная функция Python (где вызов myget(d, k, v) как d.get(k, v) может быть:

def myget(d, k, v=None):
  try: return d[k]
  except KeyError: return v

пример кода в вашем вопросе явно пытаясь подсчитать количество вхождения каждого символа: если он уже имеет счетчик для данного символа, get возвращает его (так что он просто увеличивается на единицу), else get возвращает 0 (так что приращение правильно дает 1 при первом появлении символа в строке).

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

помните, что мы начинаем с пустого символы словарь

characters = {}

Я выберу букву 'е'. Давайте передадим символ ' e ' (найденный в слове The) в первый раз через петлю. Я предполагаю, что это первый персонаж, который пройдет через цикл и я буду подставлять переменные с их значениями:

for 'e' in "The quick brown fox jumped over the lazy dog.":
    {}['e'] = {}.get('e', 0) + 1 

символы.get ('e', 0) говорит python искать ключ ' e ' в словаре. Если он не найден, он возвращает 0. Поскольку это первый раз, когда 'e' передается через цикл, символ ' e ' еще не найден в словаре, поэтому get метод возвращает 0. Это значение 0 затем добавляется к 1 (присутствует в символах[символ] = символы.вам(персонажа,0) + 1 уравнение). После завершения первого цикла с использованием символа 'e', теперь у нас есть запись в словаре, как это: {'e': 1}

словарь выглядит так:

characters = {'e': 1}

теперь давайте пропустим вторую ' e ' (найденную в слове jumped) через ту же петлю. Я предполагаю, что это второй символ, чтобы пройти через цикл, и я буду обновлять переменные с их новыми значениями:

for 'e' in "The quick brown fox jumped over the lazy dog.":
    {'e': 1}['e'] = {'e': 1}.get('e', 0) + 1
на get метод находит ключевую запись для 'e' и находит его значение, которое равно 1. Мы добавляем это к другому 1 в символах.вам(персонажа, 0) + 1 и получить 2 в результате.

когда мы применяем это в символы[символ] = символы.получаем (символ, 0) + 1 уравнение:

characters['e'] = 2

должно быть ясно, что последнее уравнение присваивает новое значение 2 уже существующему ключу 'e'. Поэтому в словарь:

characters = {'e': 2}

начните здесь http://docs.python.org/tutorial/datastructures.html#dictionaries

тогда вот http://docs.python.org/library/stdtypes.html#mapping-types-dict

тогда вот http://docs.python.org/library/stdtypes.html#dict.get

characters.get( key, default )

key is a character

default is 0

если символ находится в словаре,characters, вы получаете объект словаря.

если нет, то вам 0.


синтаксис:

get(key[, default])

возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если значение по умолчанию не задано, оно по умолчанию равно None, Так что этот метод не вызывает KeyError.

Если d-словарь, то d.get(k, v) означает, дайте мне значение k В d, если только k не существует, и в этом случае дайте мне v. Он используется здесь, чтобы получить текущий счетчик символа, который должен начинаться с 0, если символ не встречался раньше.

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

from collections import Counter
letter_counter = Counter()
for letter in 'The quick brown fox jumps over the lazy dog':
    letter_counter[letter] += 1

>>> letter_counter
Counter({' ': 8, 'o': 4, 'e': 3, 'h': 2, 'r': 2, 'u': 2, 'T': 1, 'a': 1, 'c': 1, 'b': 1, 'd': 1, 'g': 1, 'f': 1, 'i': 1, 'k': 1, 'j': 1, 'm': 1, 'l': 1, 'n': 1, 'q': 1, 'p': 1, 's': 1, 't': 1, 'w': 1, 'v': 1, 'y': 1, 'x': 1, 'z': 1})

в этом примере пробелы подсчитываются, очевидно, но хотите ли вы, чтобы они фильтровались, зависит от вас.

что касается dict.get(a_key, default_value), было несколько ответов на этот конкретный вопрос -- этот метод возвращает значение ключа, или в default_value вас предложение. Первый аргумент-это ключ, который вы ищете, второй аргумент-это значение по умолчанию, когда этот ключ отсутствует.

Comments

    Ничего не найдено.