복붙노트

[PYTHON] 하나의 키에 대해 다중 값을 사전에 추가 [duplicate]

PYTHON

하나의 키에 대해 다중 값을 사전에 추가 [duplicate]

나는 Python을 처음 사용하고 있으며 매년 해와 값 목록을 가지고있다. 내가하고 싶은 일은 사전에 이미 연도가 있는지 확인한 다음 그 연도가 특정 키의 값 목록에 추가되는지 확인하는 것입니다.

예를 들어, 나는 년 목록을 가지고 있으며 매년 한 가지 가치가 있습니다.

2010  
2  
2009  
4  
1989  
8  
2009  
7  

내가하고 싶은 일은 키와 그 한자리 숫자를 값으로 삼아 사전을 채우는 것입니다. 그러나 2009 년 두 번 나열된 경우 그 두 번째 값을 사전에 값 목록에 추가하려면 원하는 :

2010: 2  
2009: 4, 7  
1989: 8  

지금 나는 다음과 같은 것을 가지고있다.

d = dict()  
years = []  

(get 2 column list of years and values)

for line in list:    
    year = line[0]   
    value = line[1]  

for line in list:  
    if year in d.keys():  
        d[value].append(value)  
    else:  
        d[value] = value  
        d[year] = year  

해결법

  1. ==============================

    1.귀하의 질문에 대해 다시 말할 수 있다면, 원하는 것은 연도를 키로 사용하는 사전과 해당 연도와 관련된 값 목록을 포함하는 매년 배열입니다. 맞습니까? 방법은 다음과 같습니다.

    귀하의 질문에 대해 다시 말할 수 있다면, 원하는 것은 연도를 키로 사용하는 사전과 해당 연도와 관련된 값 목록을 포함하는 매년 배열입니다. 맞습니까? 방법은 다음과 같습니다.

    years_dict = dict()
    
    for line in list:
        if line[0] in years_dict:
            # append the new number to the existing array at this slot
            years_dict[line[0]].append(line[1])
        else:
            # create a new array in this slot
            years_dict[line[0]] = [line[1]]
    

    years_dict에서 끝내야 할 것은 다음과 같은 사전입니다 :

    {
        "2010": [2],
        "2009": [4,7],
        "1989": [8]
    }
    

    일반적으로 항목이 암시 적으로 서로 연관되어있는 컨테이너의 적절한 하위 항목이 아닌 동일한 색인을 사용하여 항목을 암시 적으로 연결하는 "병렬 배열"을 만드는 것은 프로그래밍 실습이 좋지 않습니다.

  2. ==============================

    2.당신은 collections.defaultdict (Python 2.5에서 추가)를 사용하는 것이 가장 좋을 것입니다. 이를 통해 누락 된 키 (예 : 목록)의 기본 객체 유형을 지정할 수 있습니다.

    당신은 collections.defaultdict (Python 2.5에서 추가)를 사용하는 것이 가장 좋을 것입니다. 이를 통해 누락 된 키 (예 : 목록)의 기본 객체 유형을 지정할 수 있습니다.

    따라서 키가 존재하지 않는다면 키를 생성 한 다음 키 값에 추가하는 대신 중급 인물을 잘라내어 존재하지 않는 키에 직접 추가하여 원하는 결과를 얻습니다.

    데이터를 사용한 간단한 예 :

    >>> from collections import defaultdict
    >>> data = [(2010, 2), (2009, 4), (1989, 8), (2009, 7)]
    >>> d = defaultdict(list)
    >>> d
    defaultdict(<type 'list'>, {})
    >>> for year, month in data:
    ...     d[year].append(month)
    ... 
    >>> d
    defaultdict(<type 'list'>, {2009: [4, 7], 2010: [2], 1989: [8]})
    

    이런 식으로 1 년과 관련된 숫자를 보았는지 여부에 대해 걱정할 필요가 없습니다. 누락 된 키가 항상 목록이된다는 것을 알기 만하면됩니다. 키가 이미 있으면 추가됩니다.

  3. ==============================

    3.setdefault를 사용할 수 있습니다.

    setdefault를 사용할 수 있습니다.

    for line in list:  
        d.setdefault(year, []).append(value)
    

    이것은 setdefault가 사전에 설정하는 것뿐만 아니라리스트를 반환하고 목록이 변경 가능하기 때문에 setdefault에 의해 반환 된 버전에 추가하는 것은 사전 자체에 버전을 추가하는 것과 동일하기 때문에 이것은 작동합니다. 그게 말이된다면.

  4. ==============================

    4.

    d = {} 
    
    # import list of year,value pairs
    
    for year,value in mylist:
        try:
            d[year].append(value)
        except KeyError:
            d[year] = [value]
    

    파이썬 방식 - 허가를 요청하는 것보다 용서를받는 것이 더 쉽습니다!

  5. ==============================

    5.not in 연산자를 사용하여이 작업을 수행하는 다른 방법은 다음과 같습니다.

    not in 연산자를 사용하여이 작업을 수행하는 다른 방법은 다음과 같습니다.

    # define an empty dict
    years_dict = dict()
    
    for line in list:
        # here define what key is, for example,
        key = line[0]
        # check if key is already present in dict
        if key not in years_dict:
            years_dict[key] = []
        # append some value 
        years_dict[key].append(some.value)
    
  6. ==============================

    6.이 값을 튜플 목록에 넣으면 더 쉽습니다. 이렇게하려면 목록 분할 및 zip 함수를 사용할 수 있습니다.

    이 값을 튜플 목록에 넣으면 더 쉽습니다. 이렇게하려면 목록 분할 및 zip 함수를 사용할 수 있습니다.

    data_in = [2010,2,2009,4,1989,8,2009,7]
    data_pairs = zip(data_in[::2],data_in[1::2])
    

    Zip은 임의의 수의리스트 (이 경우에는 data_in의 짝수 및 홀수 항목)를 취해이를 하나의 튜플에 넣습니다.

    이제 setdefault 메소드를 사용할 수 있습니다.

    data_dict = {}
    for x in data_pairs:
        data_dict.setdefault(x[0],[]).append(x[1])
    

    setdefault는 키와 디폴트 값을 취하여 연관된 값을 리턴하거나 현재 값이없는 경우 디폴트 값을 리턴합니다. 이 경우 빈 또는 채워진 목록을 얻고 현재 값을 추가합니다.

  7. ==============================

    7.한 줄짜리 (거의) 원한다면 :

    한 줄짜리 (거의) 원한다면 :

    from collections import deque
    
    d = {}
    deque((d.setdefault(year, []).append(value) for year, value in source_of_data), maxlen=0)
    

    dict.detdefault를 사용하면, "key가 이미 존재하는지 확인하고 그렇지 않다면 새로운 목록을 만든다"는 아이디어를 캡슐화하여 하나의 호출로 통합 할 수 있습니다. 큐 길이가 0으로 설정되어 있기 때문에 deque에 의해 효율적으로 소비되는 생성자 표현식을 작성할 수 있습니다. 양누크는 즉시 폐기되고 그 결과는 d.

    이것은 내가 방금 재미로 한 일입니다. 나는 그것을 사용하지 않는 것이 좋습니다. deque를 통해 임의의 iterables를 소비 할 수있는 시간과 공간이 있으며, 이것은 분명히 아닙니다.

  8. from https://stackoverflow.com/questions/3199171/append-multiple-values-for-one-key-in-a-dictionary by cc-by-sa and MIT license