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
일을 하는지 이해가 안 돼요 . 쉬는 것은 꽤 간단 해 보입니다.
get
dict 의 메서드 (예 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 씩 증가 함) 그렇지 않으면 get
0을 반환합니다 (따라서 증가는 올바르게 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
'UFO ET IT' 카테고리의 다른 글
이 코드보다 Java에서 XML 문서를 문자열로 변환하는 더 우아한 방법이 있습니까? (0) | 2020.11.14 |
---|---|
Java 열거에서 foreach를 사용할 수없는 이유는 무엇입니까? (0) | 2020.11.14 |
HTTP 요청 메서드의 페이로드 (0) | 2020.11.14 |
null이 아닌 속성은 null 또는 임시 값을 참조합니다. (0) | 2020.11.14 |
Goto Label 이후의 변수 선언 (0) | 2020.11.14 |