UFO ET IT

Python의 .get () 메서드 이해

ufoet 2020. 11. 14. 11:24
반응형

Python의 .get () 메서드 이해


이 질문에 이미 답변이 있습니다.

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일을 하는지 이해가 안 돼요 . 쉬는 것은 꽤 간단 해 보입니다.


getdict 메서드 (예 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반환하고 (1 씩 증가 함) 그렇지 않으면 get0을 반환합니다 (따라서 증가는 올바르게 1문자열에서 문자의 첫 번째 발생).


무슨 일이 일어나고 있는지 이해하기 위해 문장 문자열 에서 한 글자 (두 번 이상 반복됨)를 가져다가 루프를 통과 할 때 어떤 일이 발생하는지 살펴 보겠습니다 .

문자 사전으로 시작한다는 것을 기억하십시오.

characters = {}

'e'를 선택하겠습니다. 루프를 통해 처음으로 문자 'e'( The 라는 단어에 있음 )를 전달해 보겠습니다 . 루프를 통과하는 첫 번째 문자라고 가정하고 변수를 해당 값으로 대체합니다.

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

characters.get ( 'e', ​​0) 은 파이썬에게 사전에서 키 'e'를 찾도록 지시합니다. 찾을 수없는 경우 0을 반환합니다. 'e'가 루프를 통해 처음 전달되었으므로 문자 'e'는 아직 사전에서 찾을 수 없으므로 get 메서드는 0을 반환합니다.이 0 값은 다음에 추가됩니다. 1 (문자 [특성]에서 본 = characters.get (문자, 0) + 1 식). 'e'문자를 사용하여 첫 번째 루프를 완료하면 이제 다음과 같은 항목이 사전에 있습니다. { 'e': 1}

이제 사전은 다음과 같습니다.

characters = {'e': 1}

이제 두 번째 'e'(점프 단어에서 발견됨)를 동일한 루프를 통해 전달해 보겠습니다. 루프를 통과하는 두 번째 문자라고 가정하고 변수를 새 값으로 업데이트합니다.

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

여기서 get 메소드는 'e'에 대한 키 항목을 찾고 값이 1 인 값을 찾습니다.이 값을 characters.get (character, 0) + 1 의 다른 1추가 하고 결과로 2를 얻습니다.

이것을 characters [character] = characters.get (character, 0) + 1 방정식에 적용하면 :

characters['e'] = 2

마지막 방정식이 이미 존재하는 'e'키에 새로운 값 2를 할당한다는 것이 분명합니다. 따라서 사전은 다음과 같습니다.

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])

키가 사전에 있으면 키 값을 반환하고 그렇지 않으면 기본값을 반환합니다. default가 지정되지 않은 경우 기본값은 None이므로이 메서드는 KeyError.


d가 딕셔너리라면 d.get(k, v)k가 없으면 d의 k 값을 줘야한다는 뜻입니다.이 경우에는 v를 줘요. 문자의 현재 수를 얻기 위해 여기에서 사용되며 0에서 시작해야합니다. 캐릭터가 전에 만난 적이없는 경우.


I see this is a fairly old question, but this looks like one of those times when something's been written without knowledge of a language feature. The collections library exists to fulfill these purposes.

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})

In this example the spaces are being counted, obviously, but whether or not you want those filtered is up to you.

As for the dict.get(a_key, default_value), there have been several answers to this particular question -- this method returns the value of the key, or the default_value you supply. The first argument is the key you're looking for, the second argument is the default for when that key is not present.

참고URL : https://stackoverflow.com/questions/2068349/understanding-get-method-in-python

반응형