Не понимаю трюк с методом .get () в python - PullRequest
0 голосов
/ 10 апреля 2020

Во время обучения python я наткнулся на строку кода, которая вычислит количество букв.

dummy='lorem ipsum dolor emet...'
letternum={}

for each_letter in dummy:
    letternum[each_letter.lower()]=letternum.get(each_letter,0)+1

print(letternum)

Теперь, мой вопрос - в 4-й строке кода в letternum.get(each_letter,0)+1 почему есть ,0)+1 и для чего он используется. Просьба описать.

Ответы [ 7 ]

2 голосов
/ 10 апреля 2020

letternum - это dict (словарь). У него есть метод с именем get, который возвращает значение, связанное с данным ключом. Если ключ отсутствует в словаре, он возвращает значение по умолчанию, которое равно None, если не присутствует необязательный второй аргумент, и в этом случае значение этого аргумента возвращается для отсутствующих элементов.

В этом случае letternum.get(each_letter,0) возвращает letternum[each_letter], если each_letter находится в словаре. В противном случае возвращается 0. Затем код добавляет 1 к этому значению и сохраняет результат в letternum[each_letter.lower()].

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

1 голос
/ 10 апреля 2020

Метод get в словаре описан здесь: https://docs.python.org/3/library/stdtypes.html#dict .get

get (ключ [, по умолчанию])

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

Так что это объясняет 0 - это значение по умолчанию, которое используется, когда letternum не содержит данное письмо.

Итак, у нас есть letternum.get(each_letter, 0) - это выражение находит значение, хранящееся в словаре letternum для рассматриваемой в данный момент буквы. Если значение не сохранено, вместо него значение равно 0.

Затем мы добавляем одно к этому числу: letternum.get(each_letter, 0) + 1

Наконец, мы сохранили его обратно в словарь letternum, хотя это время преобразования буквы в нижний регистр: letternum[each_letter.lower()] = letternum.get(each_letter, 0) + 1 Кажется, это может быть ошибкой. Возможно, мы хотим обновить тот же элемент, который только что посмотрел, но если each_letter в верхнем регистре, это не так.

0 голосов
/ 10 апреля 2020

Ссылка: https://www.tutorialspoint.com/python/dictionary_get.htm

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

Пример

letternum = {'NY residents': 100000, 'LA residents':200000}
print(letternum.get('NO residents')) # the NO residents valeu does not exist in the dictionary so it will return value None , which is the default.
print(letternum.get('NO residents',0))  # the NO residents valeu does not exist in the dictionary so it will return value 0 because this value was specified.

В вашем коде вы работаете с пустым словарем, поэтому letternum.get(each_letter,0)+1 равно 1, когда буквы еще не существует. Когда letternum[each_letter.lower()]=letternum.get(each_letter,0)+1 встречает значение each_letter, которое было присвоено ранее, оно добавляет его к предыдущему значению (из-за +1). Другими словами, этот код подсчитывает, сколько раз каждая фраза существует во фразе.

Все это будет более понятным для вас, если вы добавите в строку 5 в поле для l oop следующее:

print(each_letter.lower(), letternum.get(each_letter.lower()))
0 голосов
/ 10 апреля 2020

Если each_letter не найдено в letternum, each_letter: 0 вставляется в letternum. Иначе, значение от letternum[each_letter.lower()] +1 вставляется. collections.Counter() лучше для этого.

0 голосов
/ 10 апреля 2020

dict.get () используется для возврата значения ключа из словаря de и может принимать от одного до двух аргументов, являясь первым ключом, а вторым (необязательным) значением, которое будет возвращено, если ключ не является нашел. Если это значение не указано, оно вернет None, если ключ не найден.

В вашей программе, если ключ each_letter отсутствует в letternum, метод get вернет 0, а затем добавит 1 для подсчет.

0 голосов
/ 10 апреля 2020

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

0 голосов
/ 10 апреля 2020

Согласно документам в https://www.tutorialspoint.com/python/dictionary_get.htm, вторым параметром метода get для словарей является необязательный параметр, который указывает значение по умолчанию, которое будет выводиться в случае, если ключ отсутствует в словаре. Например:

letternum = {'keyone':1,'keytwo':2}
print(letternum.get('keythree',3))
print(letternum.get('keyone',3))

будет выводить 3, затем 1, потому что keythree не существует в словаре, поэтому он выводит 3 в первом операторе печати, затем 1 во втором оператор print, потому что ключ существует.

...