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