(초보) 파이썬 딕셔너리 안에 리스트 선언 및 입력 방법을 잘 모르겠어요 ㅠ

조회수 4078회

최종적으로 원하는 딕셔너리 형태는 {'코드1' : [코드1명칭, 1 or 0], '코드2' : [코드2명칭, 1 or 0], ....} 

리스트[1] 요소에 1 or 0는 별도의 작업을 해서 입력하려고 합니다,
파이썬 작성코드내 * *표시는 이렇게 저렇게 해도 안되서요.. 적어봅니다.

질문 1 : 딕셔너리 안에 리스트가 들어갈 수 있도록 어떻게 선언해야 하는지요?  

질문 2 : 입력화일( csv화일)을 읽어서 딕셔너리에 어떻게 입력해야 하는지요?

with open('ucode_file.csv', 'r') as f_ucode:

    for ucode in f_ucode:
        ucode_value = ucode.strip().split(',')
        ucode_01 = '1' #추후 별도 작업을 통해 1 or 0 삽입 예정입니다.

        ucodes.append(ucode_value)  
        ucode_dic[ucode_value[0]] = ucode_value[1]

        *ucode_dic[ucode_value[0]][1].append(1)
        ucode_dic[ucode_value[0]].append(ucode_01)
        ucode_dic[ucode_value[0][1]] = ucode_01*

-----입력화일 형태입니다(1000라인 됩니다). ucode_file.csv
UCODE(코드),UNAME(코드명칭)
UNIM04,비행안전 제4구역
UHK100,일반물류단지
UMK400,(한강)건축 등 허가제한지역
UNE114,통제보호구역(해군기지)
UQS700,항만
UQS710,항만시설


-----딕셔너리로 입력해서 사용하려고 합니다.-----
리스트[1]에 있는 1 or 0은 별도의 작업을 해서 입력하려고 합니다.
형태는 {'코드1' : [코드1명칭, 1 or 0], '코드2' : [코드2명칭, 1 or 0], ....} 

원하는 결과물 :  {'UNIM04' : [비행안전제4구역, 1], 'UHK100' : [일반물류단지, 0],
 'UMK400' : [(한강)건축 등 허가제한지역, 1], 'UNE114' : [통제보호구역(해군기지), 1],
 'UQS700' : [항만, 0], 'UQS710' : [항만시설, 0]}
  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

    • 기본모듈을 이용한 방법
    import csv
    
    with open('ucode_file.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        result = {row['UCODE']:[row['UNAME'], 1] for row in reader}
    
    result
    
    {'UNIM04': ['비행안전 제4구역', 1],
     'UHK100': ['일반물류단지', 1],
     'UMK400': ['(한강)건축 등 허가제한지역', 1],
     'UNE114': ['통제보호구역(해군기지)', 1],
     'UQS700': ['항만', 1],
     'UQS710': ['항만시설', 1]}
    
    • pandas, numpy 를 이용한 방법

    pandas, numpy 는 python 에서 데이터 처리시 기본 모듈만큼 많이 쓰이는 모듈입니다. 다양한 데이터처리를 할 수 있어서 pandas, numpy 만 익혀두면 편하게 데이터 처리를 할 수 있습니다.

    단점은 외부 모듈이므로 별도의 설치가 필요하며 pandas 에 의한 오버헤드가 약간 있을 수 있습니다. numpy 은 큰 행렬 연산에서는 굉장한 잇점이 있고 선형대수 연산이 편합니다. 행렬이 작다면 성능상 잇점이 없을 수도 있습니다.

    import pandas as pd
    
    data = pd.read_csv('ucode_file.csv')
    dict(zip(data['UCODE'], data[['UNAME']].values))
    
    {'UNIM04': array(['비행안전 제4구역'], dtype=object),
     'UHK100': array(['일반물류단지'], dtype=object),
     'UMK400': array(['(한강)건축 등 허가제한지역'], dtype=object),
     'UNE114': array(['통제보호구역(해군기지)'], dtype=object),
     'UQS700': array(['항만'], dtype=object),
     'UQS710': array(['항만시설'], dtype=object)}
    
    
    d = dict(zip(data['UCODE'], data[['UNAME']].values))
    d['UNIM04'] = np.append(d['UNIM04'], 1)
    d
    
    {'UNIM04': array(['비행안전 제4구역', 1], dtype=object),
     'UHK100': array(['일반물류단지'], dtype=object),
     'UMK400': array(['(한강)건축 등 허가제한지역'], dtype=object),
     'UNE114': array(['통제보호구역(해군기지)'], dtype=object),
     'UQS700': array(['항만'], dtype=object),
     'UQS710': array(['항만시설'], dtype=object)}
    
    • 기본모듈을 이용한 방법은 걔략적으로 이해했습니다. pandas와, numpy 를 이용한 방법은 아직 경험하지 못해 잘 모르겠네요. ㅠ 큰 데이터를 처리해야해서 공부 시작 했습니다. 자세한 설명 감사합니다. 알 수 없는 사용자 2020.1.3 21:19
    • 파이썬으로 큰 데이터를 처리해야 한다면 numpy 는 필수입니다. pandas, numpy 조합을 고민해보세요. 정영훈 2020.1.4 09:08
    • 네. 저도 공부하면서 pandas와 numpy는 반드시 공부해야하는 걸 알았습니다. 매번 정확한 답변 감사합니다. 알 수 없는 사용자 2020.1.5 23:57
  • 질문 1 : 딕셔너리 안에 리스트가 들어갈 수 있도록 어떻게 선언해야 하는지요?

    => 이미 제대로 사용하셨습니다.

    result = {
      '코드1': [] ,
      '코드2': ['값0', '값2', '2'] ,
    }
    print(result['코드2'])
    # 결과
    # ['값0', '값2', '2'] 
    

    질문 2 : 입력화일( csv화일)을 읽어서 딕셔너리에 어떻게 입력해야 하는지요?

    dictobj = csv.DictReader(open('ucode_file.csv')).next() 
    

    csv DictReader는 공식문서를 참고해보세요!

    • 질문2 코드는 잘못된 것 같아요. 함수 인자로 open을 직접 넣어버리면 파일(자원)을 close 할 수 없고 next 는 builtin 함수에요. 정영훈 2020.1.2 01:13

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)