>

dict comprehension을 사용하여 문자열 목록에 대한 구두점 사전을 만드는 방법은 무엇입니까? 다음과 같은 단일 문자열로 할 수있었습니다.

import string
test_string = "1990; and 1989', \ '1975/97', '618-907 CE"
counts = {p:test_string.count(p) for p in string.punctuation}

수정 :앞으로이 기능을 원할 경우 누구나 아래에서 복사 한 Patrick Artner의 답변이 있습니다. 문장 부호 만 유지하도록 매우 작은 수정 사항이 있습니다.

# return punctuation Counter dict for string/list/pd.Series
import string
from collections import Counter
from itertools import chain
def count_punctuation(str_series_or_list):
    c = Counter(chain(*str_series_or_list))
    unwanted = set(c) - set(string.punctuation)
    for unwanted_key in unwanted: del c[unwanted_key]
    return c


  • 답변 # 1

    왜 자신을 세십니까?

    import string
    from collections import Counter
    
    test_string = "1990; and 1989', \ '1975/97', '618-907 CE"
    c = Counter(test_string)  # counts all occurences
    for p in string.punctuation:   # prints the one in string.punctuation
        print(p , c[p])            # access like dictionary (its a subclass of dict)
    print(c)
    
    

    출력 :

    ! 0
    " 0
    # 0
    $ 0
    % 0
    & 0
    ' 4
    ( 0
    ) 0
    * 0
    + 0
    , 2
    - 1
    . 0
    / 1
    : 0
    ; 1
    < 0
    = 0
    > 0
    ? 0
    @ 0
    [ 0
    \ 1
    ] 0
    ^ 0
    _ 0
    ` 0
    { 0
    | 0
    } 0
    ~ 0
    Counter({'9': 7, ' ': 6, '1': 4, "'": 4, '7': 3, '0': 2, '8': 2, ',': 2, ';': 1, 'a': 1, 'n': 1, 'd': 1, '\\': 1, '5': 1, '/': 1, '6': 1, '-': 1, 'C': 1, 'E': 1})
    
    

    카운터는 사전과 유사합니다 : https://docs.python.org/2/library/collections.html#collections.Counter

    참조

    편집 : 목록의 여러 문자열 :

    import string
    from collections import Counter
    from itertools import chain
    test_strings = [ "1990; and 1989', \ '1975/97', '618-907 CE" , "someone... or no one? that's the question!", "No I am not!"]
    c = Counter(chain(*test_strings))
    for p in string.punctuation:
        print(p , c[p])
    print(c)
    
    

    출력 : (제거 된 0 개 항목)

    ! 2
    ' 5
    , 2
    - 1
    . 3
    / 1
    ; 1
    ? 1
    \ 1
    Counter({' ': 15, 'o': 8, '9': 7, 'n': 6, "'": 5, 'e': 5, 't': 5, '1': 4, 'a': 3, '7': 3, 's': 3, '.': 3, '0': 2, '8': 2, ',': 2, 'm': 2, 'h': 2, '!': 2, ';': 1, 'd': 1, '\\': 1, '5': 1, '/': 1, '6': 1, '-': 1, 'C': 1, 'E': 1, 'r': 1, '?': 1, 'q': 1, 'u': 1, 'i': 1, 'N': 1, 'I': 1})
    
    

  • 이전 admin on rest - FunctionField가있는 BooleanField의 숫자가 Boolean으로 변경됨
  • 다음 tsql - sql server count 문제 - 카운트를 0으로 표시하지 않음